WPF ScrollBar: горизонтальный и вертикальный от одного шаблона?

У меня есть требование пересмотреть ScrollBar так что только один Template требуется вместо отдельных горизонтальных и вертикальных. Утверждение дизайнера заключается в том, что ScrollBar можно вращать на Trigger (Ориентация = Горизонтальная), и команды меняются местами на кнопках.

Так как сингл Template настроен как Grid с рядами, горизонтальный ScrollBar при повороте застревает в центре вида, показывая только левую и правую кнопки. Похоже, это связано с тем, что высота центрального * ряда является высотой области дорожки, поэтому она не растягивается. Связывание в Trigger на высоту чего-то вроде родителя ScrollViewerActualWidth вызывает обычный стекопоток.

Какие-нибудь мысли? Я предполагаю, что есть причина, по которой все примеры имеют горизонтальный и вертикальный шаблоны отдельно.

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"/>

К счастью, одна из тех вещей, которые сработали.

Другие вопросы по тегам