我想根据条件更改应用程序中所有滚动条(箭头按钮和 slider )的大小。条件是主窗口ViewModel中的一个bool变量(Settings.TouchScreenMode)。
我想用触发器来做,就像这样:
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.Settings.TouchScreenMode,
RelativeSource={RelativeSource AncestorType=Window}}" Value="True">
<Setter Property="ArrowButtonWidth" Value="30" />
</DataTrigger>
</Style.Triggers>
我找到了设置一些 SystemParameters
的方法,但我不能在触发器中使用它,所以滚动条总是会改变,而不仅仅是当我的 bool-value 为真时:
<system:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">30</system:Double>
<system:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}">30</system:Double>
<system:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">30</system:Double>
<system:Double x:Key="{x:Static SystemParameters.VerticalScrollBarButtonHeightKey}">30</system:Double>
有没有办法在不替换滚动条的整个控件模板的情况下做到这一点?
最佳答案
您可以利用 LayoutTransform
实现同样的效果
所以只需在 LayoutTransform
中使用 ScaleTransform
即可为触摸屏完成所有操作
例如
<StackPanel Orientation="Horizontal">
<ScrollBar Margin="4" />
<ScrollBar Margin="4">
<ScrollBar.LayoutTransform>
<ScaleTransform ScaleX="2"
ScaleY="2" />
</ScrollBar.LayoutTransform>
</ScrollBar>
</StackPanel>
结果
你也许可以使用 as
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.Settings.TouchScreenMode,
RelativeSource={RelativeSource AncestorType=Window}}"
Value="True">
<Setter Property="LayoutTransform">
<Setter.Value>
<ScaleTransform ScaleX="2"
ScaleY="2" />
</Setter.Value>
</Setter>>
</DataTrigger>
</Style.Triggers>
关于c# - 有条件地设置滚动条按钮大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381583/