1

我在xaml中有这样的东西。

 <Image.Style>
            <Style TargetType="Image">
                <Setter Property="Source" Value="../Images/FolderImage.png" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=img, Path=IsEnabled}" 
                                                                           value="False">
                        <Setter Property="Source" Value="../Images/FolderImage_Disabled.png" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>

我想在后面的代码中实现同样的事情。我做了以下事情:

 Style imgStyle = new Style();

        imgStyle.TargetType = typeof(Image);

        Setter imgSetter = new Setter();
        imgSetter.Property = Image.SourceProperty;
        imgSetter.Value = bmpImg;
        imgStyle.Setters.Add(imgSetter);

        disabledImage = new BitmapImage();
        disabledImage.BeginInit();
        disabledImage.UriSource = new Uri("pack://application:,,,/../Images/FolderImage_Disabled.png");
        disabledImage.EndInit();

        DataTrigger trg = new DataTrigger();
        Binding trgBinding = new Binding();
        trgBinding.ElementName = "img";
        trgBinding.Path = new PropertyPath("IsEnabled");
        trg.Value = false;
        trg.Binding = trgBinding;
        imgStyle.Triggers.Add(trg);

        imgSetter = new Setter();
        imgSetter.Property = Image.SourceProperty;
        imgSetter.Value = disabledImage;
        trg.Setters.Add(imgSetter);
        menuIcon.SetValue(Image.StyleProperty, imgStyle);

我在 VS 输出中收到以下错误

"System.Windows.Data Error: 4 : Cannot find source for binding with 
    reference 'ElementName=img'. BindingExpression:Path=IsEnabled; DataItem=null;
    target element is 'Image' (Name='img'); target property is 'NoTarget' (type 'Object')"

这里的任何帮助将不胜感激!

4

1 回答 1

2

我不确定您为什么要这样做..但是,请尝试设置绑定源。

tryBinding.Source = this;

这是您可能要考虑的另一种方式。

  • 在后面的代码中创建一个布尔属性
  • 将该属性绑定到 img - twoway 模式的 IsEnabled 属性
  • 在属性的设置器中,根据值更改图像的来源。
于 2012-09-27T14:28:26.770 回答