これを行う最も簡単な方法は、DataTriggers
とを使用Converter
して、バインドされた値がパラメーターよりも大きいか小さいかをテストすることです。
これにより、バインドされた値に基づいてスタイルセッターを簡単に調整できます。たとえば、
<Style x:Key="MyControlStyle">
<!-- Default Values -->
<Setter Property="Grid.Row" Value="0" />
<Setter Property="Grid.Column" Value="0" />
<Style.Triggers>
<DataTrigger Value="True"
Binding="{Binding ActualHeight, ElementName=MyWindow,
Converter={StaticResource IsValueLessThanParameter},
ConverterParameter=400}">
<!-- Values to use when Trigger condition is met -->
<Setter Property="Grid.Row" Value="1" />
<Setter Property="Grid.Column" Value="1" />
</DataTrigger>
</Style.Triggers>
</Style>
トリガーされた値に基づいて変化する多くの部分を含むより複雑なレイアウトがある場合は、個々のプロパティだけでなく、テンプレート全体をトリガーに置き換えることができます
<Style x:Key="MyContentControlStyle" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource BigTemplate}" />
<Style.Triggers>
<DataTrigger Value="True"
Binding="{Binding ActualHeight, ElementName=MyWindow,
Converter={StaticResource IsValueLessThanParameter},
ConverterParameter=400}">
<Setter Property="ContentTemplate" Value="{StaticResource LittleTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
オブジェクトにバインドして、アプリケーションに関する追加情報をバインディングで使用することもできると思いますがSystemParameters
、現時点ではその正確な構文を思い出せません。