.net WPF-绑定到菜单图标

.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}"/

我有一个包含菜单的用户控件。我需要将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
对象

在代码隐藏属性中,您必须创建一个
ImageSource
对象,这真是一个难题。您可以创建
位图图像
,并传入URL

最简单的解决方案是在绑定到的代码隐藏属性中使用Microsoft的默认转换器,或者在绑定中显式使用它。该转换器称为
ImageSourceConverter

编辑:

下面是一个简单的例子:

绑定源内部的代码:

public ImageSource AddImageSource
{
    get
    {
        ImageSourceConverter imgConv = new ImageSourceConverter();
        return imgConv.ConvertFrom(this.AddImage);
    }
}
更新绑定以针对此属性而不是AddImage属性。确保在AddImage属性更改时也为此属性触发PropertyChanged事件


没有花时间为此构建一个测试场景,但它应该可以正常工作。

这个问题刚刚被浏览了1000次,但你(有用且正确)的答案只获得了我的一票!如果人们发现答案有用,他们真的应该更多地使用选票。