我希望能够根据ChildWindow
中的DataContext
设置图像的来源。以下是XAML文件:
<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>
如果我重写ChildWindow
的Show
方法并设置图像源,则它可以正常工作:
public new void Show()
{
DialogIcon.Source = new BitmapImage(new Uri(@"/Images/DialogWindow/Confirm.png", UriKind.Relative));
base.Show();
}
但是它看起来很丑,也不符合“Silverlight的方式”,因此我决定进行更改:
<Image x:Name="DialogIcon" Source="{Binding DialogIconType, Converter={StaticResource DialogIconConverter}}"></Image>
您可以看到,我已经注册了一个DialogIconConverter
来绑定来自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));
}
...
}
但现在它不起作用了,我在这个控件中有几个其他的转换器,它们都正常工作,只有这一个不工作。你能帮忙找到问题出在哪里吗?
编辑:DialogIconType
是一个枚举,并且它是DialogContext
的属性。一个DialogContext
实例将被分配给DialogWindow
的DataContext
属性。
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;
}