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;
}
... und siehe mein edit 🙂
Haben Sie versucht, mit "Images/DialogWindow/Bestätigen.png" statt "/Images/DialogWindow/Bestätigen.png"?
Versucht, funktioniert nicht.

InformationsquelleAutor Cheng Chen | 2010-11-18

Schreibe einen Kommentar