コンテンツとしてButton
オブジェクトを含む単純なImage
コントロールがあります。 Image
が無効になっているときにButton
の不透明度を0.5に設定して、Button
ステータスに関する追加の視覚的なキューを提供したいと思います。
XAMLでその結果を達成する最も簡単な方法は何ですか?ご協力いただきありがとうございます。
画像スタイルでトリガーを使用します。 (ボタンスタイルに配置する方が自然ですが、ボタンスタイルは厄介な技術的な理由で画像に簡単に影響を与えることはできません。それ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を使用して、包含ボタンにバインドする必要があります。
より一般的なものが必要な場合は、これをウィンドウまたは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>
適用できるより一般的なスタイルは次のとおりです。
<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>
ボタン全体をグレーアウトする場合は、ボタン自体のスタイル設定が有効です。すべてのボタンのコンテンツがグレーアウトされているようです。
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value=".75"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>