.net WPF-绑定到菜单图标
我有一个包含菜单的用户控件。我需要将Menu.Icon绑定到UserControl的一个属性,但它不起作用 代码是这样开始的-.net WPF-绑定到菜单图标,.net,wpf,binding,menu,.net,Wpf,Binding,Menu,我有一个包含菜单的用户控件。我需要将Menu.Icon绑定到UserControl的一个属性,但它不起作用 代码是这样开始的- <Border Grid.Row="0"> <DockPanel> <Image x:Name="testImage" Height="16" Width="16" Source="{Binding ElementName=UC,Path=AddImage}"/
<Border Grid.Row="0">
<DockPanel>
<Image x:Name="testImage" Height="16" Width="16" Source="{Binding ElementName=UC,Path=AddImage}"/>
<Menu DockPanel.Dock="Left" Height="20"
VerticalAlignment="Center">
<MenuItem Header="{Binding ElementName=UC,Path=AddText}">
<MenuItem.Icon>
<!--<Image x:Name="workswhenin" Height="16" Width="16" Source="pack://application:,,/Kowdox;component/Images/UserIcons/user_add.png"/>-->
<Image x:Name="realImage" Height="16" Width="16"
Source="{Binding ElementName=UC,Path=AddImage}"/>
</MenuItem.Icon>
</MenuItem>
您看到的第一个声明图像(testImage)工作得非常完美,因此我很高兴绑定是正确的。第二个映像(注释掉并命名为'workswhenin')包含我正在传递给UserControls绑定属性的包URI,它也可以工作,但第三个映像(realImage)根本没有出现
我看不出它为什么不起作用;我知道绑定很好,并且我知道图像在标记中的位置很好,所以发生了什么
任何帮助都将不胜感激。
提前谢谢。我不能确定,因为我看不到您的代码,但我很确定我知道问题出在哪里
Image.Source
需要类型为ImageSource
的对象。在XAML中指定URL时,将使用默认WPF转换器将URL转换为ImageSource
对象。因为您使用的是绑定,所以不使用默认转换器。因此,您可能正在尝试将图像源设置为URL值,而不是ImageSource
对象
在代码隐藏属性中,您必须创建一个ImageSource
对象,这真是一个难题。您可以创建位图图像
,并传入URL
最简单的解决方案是在绑定到的代码隐藏属性中使用Microsoft的默认转换器,或者在绑定中显式使用它。该转换器称为ImageSourceConverter
编辑:
下面是一个简单的例子:
绑定源内部的代码:
public ImageSource AddImageSource
{
get
{
ImageSourceConverter imgConv = new ImageSourceConverter();
return imgConv.ConvertFrom(this.AddImage);
}
}
更新绑定以针对此属性而不是AddImage属性。确保在AddImage属性更改时也为此属性触发PropertyChanged事件
没有花时间为此构建一个测试场景,但它应该可以正常工作。这个问题刚刚被浏览了1000次,但你(有用且正确)的答案只获得了我的一票!如果人们发现答案有用,他们真的应该更多地使用选票。