【问题标题】:WPF, learning to style scrollbarWPF,学习样式滚动条
【发布时间】:2015-05-05 19:26:08
【问题描述】:

我目前正处于(对我而言相当陡峭的)WPF 和样式的学习曲线中。我设法设置了我在应用程序中使用的大多数控件的样式,但现在我遇到了困难:我想设置我的滚动条的样式。

我阅读了很多关于这个主题的文档

所以是时候练习了。我之前的实验是如何开始的,只是在控件上设置样式,运行应用程序,查看我创建的可怕的创作,然后从那里开始。

我似乎无法开始使用滚动条。

例如,当我在我的 Styles.xaml 中添加以下样式时(在我的 Window.Resources 中正确引用了该样式,按钮、TextBlocks、Groupboxes 等的所有其他样式都可以正常工作)

<Style TargetType="{x:Type Thumb}">
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="IsTabStop" Value="false" />
    <Setter Property="Focusable" Value="false" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}"> 
                <Border 
                    CornerRadius="0"
                    Background="Chartreuse"
                    BorderBrush="Red"
                    BorderThickness="15" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

当我运行我的应用程序时,它不会以任何方式反映出来。我尝试了几种样式(使用 TargetType Thumb、TargetType RepeatButton 等复制粘贴示例)。

我是否需要滚动查看器+滚动条+重复按钮+拇指的完整样式定义才能获得我的第一个视觉结果?

我想从改变拇指和滚动条本身开始,只是外观。我不知道如何开始,然后从随机博客中复制/粘贴 300 行 xaml,这导致我完全迷失了......

希望一些 WPF 风格的魔术师可以为我指明正确的方向。如前所述:最好是一步一步的缓慢路线,这样我才能真正让自己相信我明白我在做什么:)。

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    所以如果我们去看看default style templates,你会看到一个硬引用;

    Thumb Style="{StaticResource ScrollBarThumb}"

    因此,您可以通过多种方式之一覆盖它正在使用的 x:Key 资源,或者您可以设置整个样式模板的样式,其中包括 Thumb 并从那里合并它。如果您需要参考(尽管是针对 Silverlight),我可以向您发送我几年前做的许多主题之一的源代码,如果您愿意,可以深入研究,因为上面没有 NDA,您可以查看输出 here .哪一个,一旦你知道了 xaml,你就不会在乎它是 SL、WPF、WP 等等......

    无论如何,为了立即解决您的问题,您可以在实例中覆盖该资源,例如 (pseudo);

    <ScrollViewer>
       <ScrollViewer.Resources>
        <Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}">
        <Setter Property="SnapsToDevicePixels" Value="True" />
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="IsTabStop" Value="false" />
        <Setter Property="Focusable" Value="false" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Thumb}"> 
                    <Border 
                        CornerRadius="0"
                        Background="Chartreuse"
                        BorderBrush="Red"
                        BorderThickness="15" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
       </ScrollViewer.Resources>
    </ScrollViewer>
    

    希望这会有所帮助,干杯。

    【讨论】:

    • 嗨,克里斯,你已经教会了我很多东西。我可以覆盖“默认”键以便被默认控件拾取的部分非常有帮助!复制/粘贴您的修复,还没有任何可见的。但是,这可能是我这边的愚蠢行为。明天早上我再看看!到目前为止非常感谢(当我得到它的工作时会接受答案,或者我会带着更多问题回来:))
    • 别担心,我们都去过那里。让我知道。干杯
    • 您确定键是 ScrollBarThumb 吗?我刚刚看了默认模板,只找到了ScrollBarThumbVertical和ScrollBarThumbHorizo​​ntal
    • @Dominik ctrl+F 在页面上,你会看到它。我只是通过那个文档,我目前没有打开 WPF 项目来验证,但我们都知道有时 MS 文档与真实交易不完全匹配,所以谁知道哈哈。
    • 哦,对了,我正在查看 Blend 中的默认模板
    【解决方案2】:

    问题在于 Scrollbar 为 Thumb 定义了一种样式并将其设置为本地值。因此,您不能使用自己的样式更改它,因为本地值优先于隐式样式。

    您可以在此处查看优先级列表: https://msdn.microsoft.com/en-us/library/ms743230%28v=vs.110%29.aspx

    要编辑样式,您有两个选择:

    第一个是用ScrollBarThumbVerticalScrollBarThumbHorizontal键覆盖资源。

    第二种是将默认模板复制到自己的滚动条上,直接编辑这些样式。 Scrollbar 的默认模板大约有 250 行代码,但是,您可以放心地忽略所有触发器,它们约占代码的一半。找到解决方法需要一些时间,但我相信这是一次很好的学习经历。

    【讨论】:

      猜你喜欢
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      相关资源
      最近更新 更多