将FormatConvertedBitmap替换为基于datacontext值的图像

时间:2012-01-04 18:26:29

标签: .net wpf

我对wpf很新,问题如下。

带图像的按钮应该与WinForms中的按钮完全相同 - 禁用时会变灰(因此有些人认为设置图像的不透明度是不够的,因为它会留下颜色)。

所以我找到了一段代码:

<Image RenderOptions.BitmapScalingMode="NearestNeighbor" Height="20" Width="20" 
                       Opacity="{Binding SelectedItem, Converter={StaticResource selectedItemPresent}}">
                    <Image.Source>
                        <FormatConvertedBitmap DestinationFormat="Gray8">
                            <FormatConvertedBitmap.Source>
                                <BitmapImage UriSource="Images/edit_info.png" />
                            </FormatConvertedBitmap.Source>
                        </FormatConvertedBitmap>
                    </Image.Source>
                    <Image.OpacityMask>
                        <ImageBrush>
                            <ImageBrush.ImageSource>
                                <BitmapImage UriSource="Images/edit_info.png">
                            </ImageBrush.ImageSource>
                        </ImageBrush>
                    </Image.OpacityMask>
                </Image> 

这会产生一个灰色的按钮,工作完成了一半。 (转换器只根据数据绑定项值返回1或0.3。)

然而,我真正需要的是仅当所选项目为空时才将其灰显。

所以,我有两个问题。 1.如何根据数据上下文值应用所有...东西?可能会创建另一个转换器。 然后我将以编程方式执行此声明性xaml?或者我可以在xaml中定义一些规则,因此只有当规则触发时,部分才有效?

2.这应该在几个按钮上完成 - 如何将这个逻辑考虑在内(我在相关项目中看到了一些style.xaml - 是放在哪里)?

感谢您的考虑。

1 个答案:

答案 0 :(得分:0)

为什么不将Button的Image和/或Opacity基于IsEnabled的{​​{1}}值?

DataTrigger

以这种方式实现这一目标的最大优势之一是您不会将UI与任何业务逻辑联系在一起。在WPF中,按钮经常绑定到命令,如果<Style TargetType="{x:Type Button}"> <Setter Property="Content" Value="{StaticResource DefaultImage}" /> <Setter Property="Opacity" Value="1" /> <Style.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Content" Value="{StaticResource DisabledImage}" /> <Setter Property="Opacity" Value=".3" /> </Trigger> </Style.Triggers> </Style> 计算结果为false,则会自动禁用。你不必担心这种情况。