最も簡単な方法は、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
オブジェクトにバインドして、バインディング内のアプリケーションに関する追加情報を使用することもできますが、今のところ正しい構文を覚えていないと思います。
あなたは一人でXAMLを使用して意味するか、またはあなたがコードでこれを行う方法を探していますか? – Zipper
@Zipperもちろん、XAMLではこれを宣言的に行うことをお勧めします。すぐにはできない場合は、フレームワークコードを書いても構いません。しかし、最終的には、手続き型コードなしでレイアウトを記述したい。 – Athari