我想根据条件更改应用程序中所有滚动条(箭头按钮和拇指)的大小。条件是主窗口的ViewModel中的布尔变量(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为true时:

<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实现相同的目标

因此,只需在ScaleTransform中使用LayoutTransform即可完成触摸屏的所有操作

例如



<StackPanel Orientation="Horizontal">
    <ScrollBar Margin="4" />
    <ScrollBar Margin="4">
        <ScrollBar.LayoutTransform>
            <ScaleTransform ScaleX="2"
                            ScaleY="2" />
        </ScrollBar.LayoutTransform>
    </ScrollBar>
</StackPanel>


结果



你也许可以用

    <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/

10-17 02:38