我想根据DataContext
中的ChildWindow
来设置图片的来源。这是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>
如果我覆盖Show
的{{1}}方法并设置图片的来源,则工作正常:
ChildWindow
但它看起来很丑陋并且不是“银色方式”,所以我决定改变:
public new void Show()
{
DialogIcon.Source = new BitmapImage(new Uri(@"/Images/DialogWindow/Confirm.png", UriKind.Relative));
base.Show();
}
您看到我已注册<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
的{{1}}属性。
DataContext
答案 0 :(得分:2)
假设DialogIconType
是图像的路径(例如“Images / DialogWindow / Confirm.png”),它应该没有值转换器,如下所示:
<Image Source="{Binding DialogIconType}" />
修改强>
也可以从valueconverter的Convert
方法返回图像的路径 - 即:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return "Images/DialogWindow/Confirm.png";
}
编辑2:
以下内容也适用于UriKind.Relative
:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new BitmapImage(new Uri("Images/DialogWindow/Confirm.png", UriKind.Relative));
}
答案 1 :(得分:1)
可能很傻,但你确定你的转换器在你的xaml文件中被正确引用了吗?
否则,我建议尝试将此语法作为URI的路径(将图像设置为资源):
return new BitmapImage(new Uri("pack://application:,,,/Images/DialogWindow/Confirm.png", UriKind.Relative));
编辑:
好吧,我想我已经知道了: 看看你的输出窗口,你可能会看到一些错误40绑定... blablabla ...我的猜测是转换器是正确的,但绑定的来源不是,所以基本上甚至没有使用转换器。
原因是您的DialogIconType不是依赖属性,因此无法绑定。
换句话说,这个:
public DialogIconType IconType { get; set; }
应该成为这个:
public static DependencyProperty IconTypeProperty = DependencyProperty.Register("IconType", typeof(DialogIconType), typeof(DialogContext));
public DialogIconType IconType
{
get { return (DialogIconType)(GetValue(IconTypeProperty)); }
set { SetValue(IconTypeProperty , value); }
}
另外,在您的Xaml中,您应该绑定到“IconType”,而不是“DialogIconType”(这是一种类型,而不是属性)
(这可能是唯一的问题,因为我不确定这里是否真的需要依赖属性,现在我想到了它)