我正在查看ScrollBar的默认控件模板,我遇到了Vertical ScrollBar的这个Grid定义
<Grid.RowDefinitions>
<RowDefinition MaxHeight="{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}" />
<RowDefinition Height="0.00001*" />
<RowDefinition MaxHeight="{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}" />
</Grid.RowDefinitions>
对于Horizontal ScrollBar也是如此,ColumnDefinition中的宽度值相同。
这种轨道区域大小定义的目的是什么(0.00001 *)?我把它改成简单的1 *,外观没有区别!
答案 0 :(得分:3)
默认情况下,RowDefinition.Height
为1*
。因此,其他两行的大小也相对较大,因为模板仅设置MaxHeight
而不是覆盖Height
的默认值。
OP中的代码摘录应与此完全相同:
<Grid.RowDefinitions>
<RowDefinition Height="1*"
MaxHeight="{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}" />
<RowDefinition Height="0.00001*" />
<RowDefinition Height="1*"
MaxHeight="{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}" />
</Grid.RowDefinitions>
意味着中心行的高度与其他两个相比几乎为零,除非这两个行达到他们的MaxHeight。在这种情况下,中心行是“允许”#34;增加尺寸并占据所有剩余的空间。
如果设置1*
似乎对您有用,可能是因为您还没有尝试过两个滚动按钮彼此非常接近的情况。
使用0.00001*
时,按钮不应缩小,直到它们相互接触为止。例如:
<ControlTemplate x:Key="VerticalScrollBar"
TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition MaxHeight="18" />
<RowDefinition Height="0.00001*" />
<RowDefinition MaxHeight="18" />
</Grid.RowDefinitions>
此代码生成默认行为:
使用1*
时,按钮应该在触摸之前开始缩小,并且实际上根本不会互相触碰,从而在它们之间保持一定比例的自由空间。
此代码......
<ControlTemplate x:Key="VerticalScrollBar"
TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition MaxHeight="18" />
<RowDefinition Height="1*" />
<RowDefinition MaxHeight="18" />
</Grid.RowDefinitions>
产生这个:
答案 1 :(得分:0)
如果只有somevalue * height的行,这将没有任何区别。当有更多行具有不同的somevalue *高度时,您将开始注意到差异。
谢谢