2012-01-04 105 views
0

图像替换FormatConvertedBitmap我很新的WPF和问题如下。基于的datacontext价值

按钮与图片真的应该表现得像那些的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 - 就是把它放在哪里)?

感谢审议。

回答

0

为什么不把基于和/或OpacityIsEnabled值设置为DataTrigger

<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> 

这样做的一个最大的好处是你不会将你的用户界面与任何业务逻辑绑定在一起。在WPF中,按钮经常与命令绑定,并且如果Command.CanExecute的计算结果为false,它将自动禁用。你不必担心这种情况。

+0

,我是很新的WPF。那么,我如何通过那些需要它的按钮来引用这个样式(不是所有的按钮) - 我看到按钮上有一个Style属性,但在Style标签中没有看到类似Name属性的东西。而且,对于一个按钮,图像是相同的,无论其是启用还是禁用。只需要将其变灰。但是我明白你的观点 - 只需将移动到Style.Triggers,对吧?但是,每个按钮都有自己的图像源,那么我怎样才能将其替换为样式? – Nickolodeon 2012-01-04 19:29:48

+0

@Nickolodeon你可以给你的风格,例如键'<形式X:键= ImageButtonStyle ... />'然后将其应用到特定的按钮'<按钮样式= “{StaticResource的ImageButtonStyle}”'。如果启用和禁用的图片都是相同的,只需从样式中删除这些图片,并设置每个按钮的'',而不是在样式中设置该值。 – Rachel 2012-01-04 19:38:05

+0

实际上我有类似于 Nickolodeon 2012-01-04 19:43:53