2012-01-04 13 views
0

私はwpfとその問題を次のように非常に熟知しています。datacontext値に基づく画像の代わりにFormatConvertedBitmapを使用

イメージを持つボタンは、実際には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を返します)

しかし、私が本当に必要とするのは、選択した項目がnullの場合にのみ灰色にすることです。

私は2つの質問があります。 1.データコンテキスト値に基づいてすべてのものを適用する方法?別のコンバータを作成することができます。 次に、この宣言的なxamlをプログラムで実行する必要がありますか?あるいは、xamlでいくつかのルールを定義することができるので、ルールが起動したときにのみ有効になります。

2.これはいくつかのボタンに実行する必要があります - このロジックをどのように取り除くことができますか(私は関連するプロジェクトでいくつかのstyle.xamlを見ました。

ありがとうございました。

答えて

0

ボタンのImageおよび/またはOpacityがのIsEnabledの値になるのはなぜですか。

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

このようにすることの最大の利点の1つは、UIをビジネスロジックと結びつけていないことです。 WPFでは、ボタンは頻繁にコマンドにバインドされ、Command.CanExecuteがfalseに評価されると自動的に無効になります。あなたはその状況を心配する必要はありません。

+0

に似て、それの問題に苦しんでいますが、私は、多くの機会に正常にこれを使用しています。だから、私はこのスタイルを必要とするボタン(すべてではない)でこのスタイルをどのように参照するのですか? - ボタンにStyleプロパティがありますが、StyleタグのName属性のようなものは見えません。また、画像は、有効か無効かに関係なく、1つのボタンで同じです。ただそれを灰色にする必要があります。しかし、私はあなたのことを知っています - 単にをStyle.Triggersに移動してください。しかし、すべてのボタンには独自のイメージソースがありますので、どのようにスタイルを変えることができますか? – Nickolodeon

+0

@Nickolodeonあなたのスタイルに '