最简单的方法是用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