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

标签 c# wpf triggers

我想根据条件更改应用程序中所有滚动条(箭头按钮和 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>

结果

scrollbar magnification

你也许可以使用 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/

相关文章:

c# - 通过验证可编辑的下拉列表

wpf - 使用 WPF 的平滑文本动画 (Marquee)

c# - 如果在我的 WPF 项目中找不到 xml 文件,如何编写创建新的 xml?

插入触发器后的mysql更新另一个表的列

javascript - 谷歌脚本在编辑或删除后检测空单元格

c# - 如何在 LINQ 中进行外部连接?

c# - 如果将窗体大小调整为以前的透明区域,则不再检测窗体上的鼠标事件

c# - CaSTLe ILogger 和延迟加载 Func<string>

c# - 如何在 WPF 中绑定(bind)来自 XML 元素的图像

sql - Oracle变异触发器的解决方案