WPF,改变滚动条宽度,看不懂语法

呵呵防城港 2013-07-25 09:53:28
从博客园抄了一个改变滚动条宽度的方法:


<ScrollViewer HorizontalScrollBarVisibility="Auto"

xmlns:sys="clr-namespace:System;assembly=mscorlib">

<ScrollViewer.Resources>

<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">100</sys:Double>

<sys:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">100</sys:Double>

</ScrollViewer.Resources>

<Button Width="400" Height="400">aaa</Button>

</ScrollViewer>



实在看不懂,这是什么语法:
1:ScrollViewer只是定义了2个Double资源,又没有引用资源之类的,为什么能改变滚动条宽度?
2:
<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">100</sys:Double>
这是什么啊,一个资源?Key为什么设置为那样的?100滚动条宽度?不懂
...全文
712 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
呵呵防城港 2013-07-26
  • 打赏
  • 举报
回复
引用 9 楼 kingdom_0 的回复:
利用这种方式,更改系统中定义的两个参数的值。而不是自定义Key
那请问,我用同样的方法设置滚动条上 Thumb的宽度、高度,为什么没有产生效果呢?

<ScrollViewer.Resources>
            <s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">5</s:Double>
            <s:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">5</s:Double>
            <s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarThumbHeightKey}">10</s:Double>
            <s:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarThumbWidthKey}">10</s:Double>
        </ScrollViewer.Resources>
kingdom_0 2013-07-26
  • 打赏
  • 举报
回复
引用 7 楼 qldsrx 的回复:
有个前提,ScrollViewer内部会用到两个ResourceKey,分别是:“SystemParameters.VerticalScrollBarWidthKey”和“SystemParameters.HorizontalScrollBarHeightKey”,这两个Key的值是系统定义的,且为静态,这里通过<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">100</sys:Double>的语法,定义了相同名称的ResourceKey,那么WPF在向上查找ResourceKey的时候,就会优先查到你定义的这个ResourceKey,使用你定义的100的值而不是系统定义的。 这只是简单的将自定义ResourceKey替换系统定义的ResourceKey的一个写法,没有太大的含义。
利用这种方式,更改系统中定义的两个参数的值。而不是自定义Key
呵呵防城港 2013-07-26
  • 打赏
  • 举报
回复
引用 7 楼 qldsrx 的回复:
有个前提,ScrollViewer内部会用到两个ResourceKey,分别是:“SystemParameters.VerticalScrollBarWidthKey”和“SystemParameters.HorizontalScrollBarHeightKey”,这两个Key的值是系统定义的,且为静态,这里通过<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">100</sys:Double>的语法,定义了相同名称的ResourceKey,那么WPF在向上查找ResourceKey的时候,就会优先查到你定义的这个ResourceKey,使用你定义的100的值而不是系统定义的。 这只是简单的将自定义ResourceKey替换系统定义的ResourceKey的一个写法,没有太大的含义。
那请问,我用同样的方法设置滚动条上 Thumb的宽度、高度,为什么没有产生效果呢? <ScrollViewer.Resources> <s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">5</s:Double> <s:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">5</s:Double> <s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarThumbHeightKey}">10</s:Double> <s:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarThumbWidthKey}">10</s:Double> </ScrollViewer.Resources>

qldsrx 2013-07-26
  • 打赏
  • 举报
回复
有个前提,ScrollViewer内部会用到两个ResourceKey,分别是:“SystemParameters.VerticalScrollBarWidthKey”和“SystemParameters.HorizontalScrollBarHeightKey”,这两个Key的值是系统定义的,且为静态,这里通过<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">100</sys:Double>的语法,定义了相同名称的ResourceKey,那么WPF在向上查找ResourceKey的时候,就会优先查到你定义的这个ResourceKey,使用你定义的100的值而不是系统定义的。 这只是简单的将自定义ResourceKey替换系统定义的ResourceKey的一个写法,没有太大的含义。
Jason-Jin 2013-07-26
  • 打赏
  • 举报
回复
这已经指定了 x:Static SystemParameters.VerticalScrollBarWidthKey 宽 x:Static SystemParameters.HorizontalScrollBarHeightKey 高
呵呵防城港 2013-07-26
  • 打赏
  • 举报
回复
滚动条宽度是设置为静态的系统的值吗?为什么又可以随意设置? 把资源键名设置为静态的值,是什么意思? 不懂哦,实在
E次奥 2013-07-26
  • 打赏
  • 举报
回复
放到内部就不用再引用了
qldsrx 2013-07-26
  • 打赏
  • 举报
回复
老实说,这个第一种方法真的好比使用反射,我不清楚他们是怎么看系统自带控件的xaml代码的,我只能举个例子来说明下可能的情况:
<ScrollViewer HorizontalScrollBarVisibility="Auto" xmlns:s="clr-namespace:System;assembly=mscorlib">
    <ScrollViewer.Resources>
        <s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">10</s:Double>
        <s:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">10</s:Double>
        <s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarThumbHeightKey}">100</s:Double>
        <s:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarThumbWidthKey}">100</s:Double>
        <Style TargetType="{x:Type ScrollBar}">
            <Style.Triggers>
                <Trigger Property="Orientation" Value="Horizontal">
                    <Setter Property="Width" Value="Auto"/>
                    <Setter Property="Height" Value="{DynamicResource {x:Static SystemParameters.VerticalScrollBarThumbHeightKey}}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ScrollViewer.Resources>
    <Canvas Width="600" Height="600"/>
</ScrollViewer>
你试下下这段样式代码,这是由博客园上第二种方法修改而来的,他用的是固定值100,我这里用系统资源VerticalScrollBarThumbHeightKey,你会发现,通过前面的“<s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarThumbHeightKey}">100</s:Double>”的修改是有效的,但是当你把DynamicResource改为了StaticResource后,就无效了,这是资源字典引用的一个区别,静态引用的话,就无法通过运行时修改来改变它绑定的值。故而推测你的那个Thumb的宽度、高度是静态资源引用,非动态的引用。因为无法看到原始xaml文件定义,所以这里只能是推测,希望这个说法你可以接受。
闲云之然 2013-07-25
  • 打赏
  • 举报
回复
xaml里一个double数值也可以被定义为resource的,每个resource都有一个key和一个value。SrollViewer默认会去找是否有key为SystemParameters.VerticalScrollBarWidthKey和SystemParameters.HorizontalScrollBarHeightKey的double类型的resource,如果找到了的话,就会用它们的value来设置纵向滚动条的宽度和横向滚动条的高度,也就是你所说的“滚动条的宽度”。如果找不到,就用默认的值。我猜100应该是以像素为单位的吧。
呵呵防城港 2013-07-25
  • 打赏
  • 举报
回复
引用 1 楼 wuzhengqing1 的回复:
没看到吗,这是设置该资源的纵向和横向的滚动条的
我知道是设置纵向和横向滚动条的。俺是不懂这种语法
_老吴 2013-07-25
  • 打赏
  • 举报
回复
没看到吗,这是设置该资源的纵向和横向的滚动条的
呵呵防城港 2013-07-25
  • 打赏
  • 举报
回复
滚动条宽度是设置为静态的系统的值吗?为什么又可以随意设置? 把资源键名设置为静态的值,是什么意思? 不懂哦,实在
在Windows系统中,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS中的经典DEMO中,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目中,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大中型WPF项目中必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程中,赵老师带领你在WPF中,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手中“复活”。在课程中,赵老师会详细讲解WPF和MVVM中的各种技巧,让你从此爱上WPF+MVVM编程。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧