Dynamic image source binding in silverlight
Möchte ich um ein Bild der Quelle nach seiner DataContext
im ChildWindow
. Hier ist der XAML-Datei:
<controls:ChildWindow x:Class="CEM.Controls.DialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" Title="{Binding Title}">
...
<Image x:Name="DialogIcon"></Image>
...
</controls:ChildWindow>
Es funktioniert gut, wenn ich das überschreiben der Show
Methode der ChildWindow
und die Bild-Quelle:
public new void Show()
{
DialogIcon.Source = new BitmapImage(new Uri(@"/Images/DialogWindow/Confirm.png", UriKind.Relative));
base.Show();
}
Sieht aber hässlich aus und es ist nicht die "silverlight-Weg", so dass ich entscheiden, zu ändern:
<Image x:Name="DialogIcon" Source="{Binding DialogIconType, Converter={StaticResource DialogIconConverter}}"></Image>
Sehen Sie, ich habe ein DialogIconConverter
registriert zu binden, die Quelle, aus der DataContext
.
public class DialogIconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//currently it's an hard-coded path
return new BitmapImage(new Uri(@"/Images/DialogWindow/Confirm.png", UriKind.Relative));
}
...
}
Aber es funktioniert nicht ich habe jetzt mehrere andere Konverter, die in dieser Steuerung, die gut funktioniert. Nur das wird nicht funktionieren. Können Sie helfen, um herauszufinden, wo das problem ist?
EDIT: DialogIconType
ist ein enum, und auch es ist eine Eigenschaft der DialogContext
. Eine Instanz von DialogContext
zugewiesen werden DataContext
Eigenschaft des DialogWindow
.
public enum DialogIconType
{
Confirm,
Alert,
Error
}
public class DialogContext
{
public string Title { get; set; }
public string Content { get; set; }
public DialogButtons Buttons { get; set; }
public DialogIconType IconType { get; set; }
}
internal DialogWindow(DialogContext context)
{
InitializeComponent();
this.DataContext = context;
}
Haben Sie versucht, mit "Images/DialogWindow/Bestätigen.png" statt "/Images/DialogWindow/Bestätigen.png"?
Versucht, funktioniert nicht.
InformationsquelleAutor Cheng Chen | 2010-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
vielleicht albern, aber haben Sie stellen Sie sicher, dass Ihre Software auf die verwiesen wird, richtig in der xaml-Datei ?
ansonsten, schlage ich vor, Sie versuchen, diese syntax als Pfad für die URI (mit Bildern setup als Ressourcen):
EDIT :
ok, ich glaube ich habe es :
Blick in die Ausgabe-Fenster, sehen Sie wahrscheinlich einige Fehler 40 Bindung ... blablabla...
Meine Vermutung ist, dass der Konverter ist richtig, aber die Quelle der Bindung nicht, so dass im Grunde der Konverter wird gar nicht genutzt.
Der Grund dafür ist, dass Ihre DialogIconType nicht um eine Abhängigkeitseigenschaft, so ist es nicht gebunden werden kann.
in anderen Worten :
werden sollte :
plus, die in Xaml, die Sie Binden soll "IconType", und nicht "DialogIconType" (das ist ein Typ und keine Eigenschaft)
(dies könnte sogar das alleinige Problem, da bin ich mir nicht sicher, ob eine dependencyProperty Ist eigentlich wirklich nötig, hier, jetzt, ich glaube es)
App.xaml
einige andere Konverter sind es mit ihm.Ich bearbeitet mit einigen reflexion, die ich hatte in Bezug auf Ihr problem
Es ist ein Tippfehler! Ich brauche zu ändern
DialogIconType
zuIconType
! Danke!InformationsquelleAutor David
Unter der Annahme, dass
DialogIconType
ist der Pfad zum Bild (z.B. "Images/DialogWindow/Bestätigen.png"), sollte es funktionieren, ohne einen valueconverter, wie unten gezeigt:EDIT:
Rücksendung der Pfad zum Bild aus der valueconverter ist
Convert
Methode ist auch möglich - d.h.:EDIT 2:
Folgende funktioniert auch mit
UriKind.Relative
:Chen: ... und siehe mein edit 🙂
Funktioniert nicht. Da die
Source
Eigenschaft einesImage
istImageSource
geben, nicht einestring
geben. Wir können weisen Sie einen string-Wert in XAML, um dieSource
Eigenschaft, da wird es dann konvertiert werden, umImageSource
da es eineDependencyProperty
namensSourceProperty
imImage
Klasse. Aber wenn Sie bei der Umsetzung Ihrer eigenenConverter
, muss der genaue Typ.Chen: Hmm... bei mir funktioniert. Welche version von Silverlight, die Sie verwenden?
SL4. Ich denke das Thema ist nicht, weil "/" da es funktioniert wenn ich es in
Show()
Methode.InformationsquelleAutor Jakob Christensen