【问题标题】:How to set image source via trigger from code behind in wpf如何通过触发器从 wpf 中的代码后面设置图像源
【发布时间】:2012-09-19 02:22:54
【问题描述】:

我在 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')"

我们将不胜感激!

【问题讨论】:

    标签: wpf image code-behind


    【解决方案1】:

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

    tryBinding.Source = this;
    

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

    • 在后面的代码中创建一个布尔属性
    • 将该属性绑定到 img - twoway 模式的 IsEnabled 属性
    • 在属性的setter中,根据值改变图片的来源。

    【讨论】:

    • 我不得不将 xaml 部分移到代码后面以减少加载时间。你是对的......由于时间不够,我盲目地关注xaml。感谢您展示正确的方式:) 欣赏它:)
    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多