WPF ScrollBar:来自一个模板的水平和垂直?

时间:2010-10-28 23:34:36

标签: wpf scrollbar styles controltemplate scrollviewer

我要求重新导出ScrollBar,以便只需要一个Template,而不是单独的水平和垂直。{}设计者的断言是ScrollBar可以在Trigger上旋转(Orientation = Horizo​​ntal),并在按钮上交换命令。

由于单Template被设置为带有行的Grid,因此水平ScrollBar在旋转时会卡在视图的中心,只显示左右按钮。这似乎是因为中心*行的高度是轨道区域的高度,因此它不会拉伸。将Trigger绑定到父ScrollViewer ActualWidth之类的高度会导致通常的堆栈溢出。

有什么想法?我认为所有示例都有一个水平和垂直模板分开的原因。

1 个答案:

答案 0 :(得分:1)

没关系。我弄清楚了:

            <Trigger Property="Orientation" Value="Horizontal">

            <!-- Rotate the ScrollBar from Vertical to Horizontal -->
            <Setter Property="LayoutTransform" TargetName="gLayoutRoot">
                <Setter.Value>
                    <RotateTransform Angle="90"/>
                </Setter.Value>
            </Setter>

            <!-- Change Track Orientation back to Vertical -->
            <Setter TargetName="PART_Track" Property="Orientation" Value="Vertical"/>
            <Setter TargetName="PART_Track" Property="IsDirectionReversed" Value="false"/>

            <!-- Change the commands to do Horizontal commands -->
            <Setter Property="Command" Value="ScrollBar.LineRightCommand" TargetName="DecreaseRepeat"/>
            <Setter Property="Command" Value="ScrollBar.LineLeftCommand" TargetName="IncreaseRepeat"/>
            <Setter Property="Command" Value="ScrollBar.PageLeftCommand" TargetName="PageDown"/>
            <Setter Property="Command" Value="ScrollBar.PageRightCommand" TargetName="PageUp"/>

        </Trigger>

然后在样式中将所有内容设置为Stretch或Auto。

        <Setter Property="HorizontalAlignment" Value="Stretch"/> 
    <Setter Property="VerticalAlignment" Value="Stretch"/>
    <Setter Property="Width" Value="Auto"/> 
    <Setter Property="Height" Value="Auto"/>

幸运的是其中一项成功。