有条件地设置滚动条按钮大小

时间:2014-06-24 08:16:54

标签: c# wpf triggers

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

有没有办法在不更换滚动条的整个控件模板的情况下执行此操作?

2 个答案:

答案 0 :(得分:3)

您可以利用LayoutTransform来实现相同的

所以只需在ScaleTransform中使用LayoutTransform,一切都在触摸屏上完成

例如

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

结果

scrollbar magnification

您可以使用

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

答案 1 :(得分:2)

为什么不使用值转换器绑定到值。但是,您需要在boolToWidthConverter中定义Resources

<Style>
        <Setter Property="ArrowButtonWidth" Value="{Binding Settings.TouchScreenMode, 
             RelativeSource={RelativeSource AncestorType=Window}}", Converter={StaticResource boolToWidthConverter} />

</Style>

修改: 也许您可以通过编程方式设置这些值。

public partial class GlobalResources : ResourceDictionary
{
    public GlobalResources()
    {
        this.Add("SystemParameters.HorizontalScrollBarButtonWidthKey", your_conditional_value);
    }
}