ScrollBar模板中的奇数行/列维度

时间:2015-06-29 19:44:13

标签: wpf

我正在查看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>

对于Horizo​​ntal ScrollBar也是如此,ColumnDefinition中的宽度值相同。

这种轨道区域大小定义的目的是什么(0.00001 *)?我把它改成简单的1 *,外观没有区别!

2 个答案:

答案 0 :(得分:3)

默认情况下,RowDefinition.Height1*。因此,其他两行的大小也相对较大,因为模板仅设置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>

此代码生成默认行为:

default behavior of the scroll buttons when stretched default behavior of the scroll buttons when shrunk

使用1*时,按钮应该在触摸之前开始缩小,并且实际上根本不会互相触碰,从而在它们之间保持一定比例的自由空间。

此代码......

<ControlTemplate x:Key="VerticalScrollBar"
             TargetType="{x:Type ScrollBar}">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition MaxHeight="18" />
                <RowDefinition Height="1*" />
                <RowDefinition MaxHeight="18" />
            </Grid.RowDefinitions>

产生这个:

behavior of the scroll buttons when stretched with height set to one star behavior of the scroll buttons when shrunk with height set to one star

答案 1 :(得分:0)

如果只有somevalue * height的行,这将没有任何区别。当有更多行具有不同的somevalue *高度时,您将开始注意到差异。

谢谢