私はこれに似た何かをしようとしています:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
<Grid>
<Button>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Content"
Value="No mouse over" />
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Content">
<Setter.Value>
<CheckBox Content="Mouse is over" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
</Window>
ただし、次のメッセージを含む実行時XamlParseExceptionが発生します。
タイプ「System.Windows.Controls.CheckBox」のコンテンツをタイプ「System.Object」のオブジェクトに追加できません。オブジェクトのエラー 'System.Windows.Controls.CheckBox
私は実際に、外部条件に応じてボタンのコンテンツに異なるアイコンを描画しようとしています。したがって、実際にDataTriggerを使用しようとしていますが、上記の例では問題が単純化されています。何か案は?
VisualsをSetter値として直接設定できないため、実際のエラーが発生しています。ただし、DataTemplateを使用してContentTemplateを設定するか、ボタンに固有または他の場所にあるリソースとしてコンテンツを作成することにより、探している動作を取得できます。
<Button>
<Button.Resources>
<CheckBox x:Key="Local_MouseOverContent" Content="Mouse is over" />
</Button.Resources>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Content" Value="No mouse over" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Content"
Value="{StaticResource Local_MouseOverContent}" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Content" Value="No mouse over" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="Button">
<CheckBox Content="Mouse is over" />
</DataTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
リマーク!まさにあなたの例は。NET Framework 4で何の変更もなしに機能します!!!!
<Button>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Content"
Value="No mouse over" />
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Content">
<Setter.Value>
<CheckBox Content="Mouse is over" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
アプリ全体のボタンで使用される一般的なスタイルを作成している場合、画像がリソースであるアプローチを使用すると、視覚的なツリーの競合が発生します。したがって、その場合はテンプレートが唯一の選択肢です。