web-dev-qa-db-ja.com

WPFボタン画像を「グレーアウト」しますか?

コンテンツとしてButtonオブジェクトを含む単純なImageコントロールがあります。 Imageが無効になっているときにButtonの不透明度を0.5に設定して、Buttonステータスに関する追加の視覚的なキューを提供したいと思います。

XAMLでその結果を達成する最も簡単な方法は何ですか?ご協力いただきありがとうございます。

57
David Veeneman

画像スタイルでトリガーを使用します。 (ボタンスタイルに配置する方が自然ですが、ボタンスタイルは厄介な技術的な理由で画像に簡単に影響を与えることはできません。それcould ButtonのControlTemplateで行われますが、それはここで望むものには行き過ぎです。)

<Button>
  <Image Source="something.png">
    <Image.Style>
      <Style TargetType="Image">
        <Style.Triggers>
          <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value="0.5" />
          </Trigger>
        </Style.Triggers>
      </Style>
    </Image.Style>
  </Image>
</Button>

ここでは、ボタンが無効になると画像が無効になるという事実を利用しているため、画像のIsEnabledプロパティで直接トリガーできることに注意してください。それ以外の場合、トリガーするButtonプロパティがImageに継承されない場合があります。その場合、FindAncestor RelativeSourceでDataTriggerを使用して、包含ボタンにバインドする必要があります。

153
itowlson

より一般的なものが必要な場合は、これをウィンドウまたはUserControlのリソースセクションに配置します。

<UserControl.Resources>     
    <Style x:Key="ImageEnabled" TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.25"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

そして、実際のボタンでこれを行うだけです

<Button>
    <Image Source="{StaticResource LinkImage}" Style="{StaticResource ImageEnabled}"/>
</Button>
35
CGsoldier

適用できるより一般的なスタイルは次のとおりです。

<Style TargetType="Button">
    <Style.Resources>
        <Style TargetType="Image">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.5" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Style.Resources>
</Style>
20
Tower

ボタン全体をグレーアウトする場合は、ボタン自体のスタイル設定が有効です。すべてのボタンのコンテンツがグレーアウトされているようです。

                    <Button.Style>
                        <Style TargetType="Button">
                            <Style.Triggers>
                                <Trigger Property="IsEnabled" Value="False">
                                    <Setter Property="Opacity" Value=".75"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Button.Style>
1
voluntier