我有一个包含菜单的用户控件。我需要将 Menu.Icon 绑定到 UserControl 的属性,但它不起作用。
代码是这样开始的——
<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
object.
在您的代码隐藏属性中,您必须创建一个ImageSource
对象,这确实是一个痛苦。你可以创建一个BitmapImage
并传入 URL。
最简单的解决方案是在要绑定到的属性后面的代码中使用 Microsoft 的默认转换器,或者在绑定中显式使用它。该转换器称为ImageSourceConverter
.
EDIT:
这是一个简单的例子:
绑定源内部的代码:
public ImageSource AddImageSource
{
get
{
ImageSourceConverter imgConv = new ImageSourceConverter();
return imgConv.ConvertFrom(this.AddImage);
}
}
更新绑定以定位此属性而不是 AddImage 属性。确保在 AddImage 属性更改时也触发该属性的 PropertyChanged 事件。
没有花时间为此构建测试场景,但它应该可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)