Arhn - архитектура программирования

Применение стиля к средству просмотра прокрутки отключает его

На всю жизнь я не могу понять, в чем проблема, как только я применяю этот стиль к средству просмотра прокрутки, вертикальная полоса прокрутки рисуется, но выглядит так, как будто она отключена. Стиль применяется из wpf xaml.

<Geometry x:Key="ScrollUp">m 3 21.703248 c 0 -0.810665 2.9850856 -4.266337 6.6335237 -7.679272 l 6.6335233 -6.2053359 6.817561 6.7653189 c 3.749658 3.720926 6.559968 7.182113 6.245132 7.691527 C 29.014905 22.7849 25.970346 20.4395 22.564054 17.063485 L 16.370796 10.925277 9.685398 17.05123 C 5.8994898 20.520327 3 22.53793 3 21.703248 z</Geometry>
<Geometry x:Key="ScrollDown">m 3 21.703248 c 0 -0.810665 2.9850856 -4.266337 6.6335237 -7.679272 l 6.6335233 -6.2053359 6.817561 6.7653189 c 3.749658 3.720926 6.559968 7.182113 6.245132 7.691527 C 29.014905 22.7849 25.970346 20.4395 22.564054 17.063485 L 16.370796 10.925277 9.685398 17.05123 C 5.8994898 20.520327 3 22.53793 3 21.703248 z</Geometry>

<Style x:Key="ScrollBarTopButton05" TargetType="{x:Type RepeatButton}" >
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="Height" Value="56" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="RepeatButton">
                <Border x:Name="ButtonTouch" CornerRadius="0" BorderThickness="1" BorderBrush="{StaticResource ButtonLine}" Background="{StaticResource LtBlue}" SnapsToDevicePixels="True" UseLayoutRounding="True" Margin="0" >
                    <Rectangle Width="22" Height="22" StrokeThickness="0" x:Name="IconColor" Margin="4">
                        <Rectangle.Tag>
                            <SolidColorBrush Color="{StaticResource DkBlueColor}" />
                        </Rectangle.Tag>
                        <Rectangle.Fill>
                            <DrawingBrush Stretch="Uniform">
                                <DrawingBrush.Drawing>
                                    <GeometryDrawing Brush="{StaticResource DkBlue}" Geometry="{StaticResource ScrollUp}"/>
                                </DrawingBrush.Drawing>
                            </DrawingBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="ButtonTouch" Property="Background" Value="{StaticResource LtGrey}" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="IconColor" Property="Visibility" Value="Hidden" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="ScrollBarBottomButton05" TargetType="{x:Type RepeatButton}" >
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="Height" Value="56" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="RepeatButton">
                <Border x:Name="ButtonTouch" CornerRadius="0" BorderThickness="1" BorderBrush="{StaticResource ButtonLine}" Background="{StaticResource LtBlue}" SnapsToDevicePixels="True" UseLayoutRounding="True" Margin="0" >
                    <Rectangle Width="22" Height="22" StrokeThickness="0" x:Name="IconColor" Margin="4">
                        <Rectangle.Tag>
                            <SolidColorBrush Color="{StaticResource DkBlueColor}" />
                        </Rectangle.Tag>
                        <Rectangle.Fill>
                            <DrawingBrush Stretch="Uniform">
                                <DrawingBrush.Drawing>
                                    <GeometryDrawing Brush="{StaticResource DkBlue}" Geometry="{StaticResource ScrollDown}"/>
                                </DrawingBrush.Drawing>
                            </DrawingBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="ButtonTouch" Property="Background" Value="{StaticResource LtGrey}" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="IconColor" Property="Visibility" Value="Hidden" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="ScrollBarPageButton05" TargetType="{x:Type RepeatButton}" >
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="MinHeight" Value="40" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="RepeatButton">
                <Border x:Name="ButtonBorder" CornerRadius="0" BorderThickness="1,0,1,0" BorderBrush="{StaticResource ButtonLine}" SnapsToDevicePixels="True" UseLayoutRounding="True" Margin="0" Background="{StaticResource LtBlue}">
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="ButtonBorder" Property="Background" Value="#C0F7F7F7" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="ScrollBarThumb05" TargetType="{x:Type Thumb}">
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="IsTabStop" Value="false" />
    <Setter Property="Focusable" Value="false" />
    <Setter Property="Height" Value="56" />
    <Setter Property="Width" Value="30" />
    <Setter Property="HorizontalAlignment" Value="Center" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <!--Thumb-->
                <Border x:Name="ScrollThumb" CornerRadius="4" Background="{StaticResource LtBlue}" BorderBrush="{StaticResource ButtonLine}" BorderThickness="1" />
                <ControlTemplate.Triggers>
                    <Trigger Property="IsDragging" Value="True">
                        <Setter TargetName="ScrollThumb" Property="Background" Value="{StaticResource LtGrey}" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="ScrollThumb" Property="Visibility" Value="Hidden" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<ControlTemplate x:Key="VerticalScrollBar05" TargetType="{x:Type ScrollBar}" >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="56" />
            <RowDefinition Height="0.00001*" />
            <RowDefinition Height="56" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="50" />
        </Grid.ColumnDefinitions>
        <!--Border around buttons and thumb-->
        <Border Grid.RowSpan="3" CornerRadius="0" Background="{StaticResource LtBlue}" BorderBrush="{StaticResource ButtonLine}" BorderThickness="1" />

        <RepeatButton Grid.Row="0" Height="56" Command="ScrollBar.LineUpCommand" Style="{StaticResource ScrollBarTopButton05}" />

        <Track Name="PART_Track" Grid.Row="1" IsDirectionReversed="true" ViewportSize="NaN" >
            <Track.DecreaseRepeatButton>
                <RepeatButton Command="ScrollBar.PageUpCommand" Style="{StaticResource ScrollBarPageButton05}" />
            </Track.DecreaseRepeatButton>
            <Track.Thumb>
                <Thumb Style="{StaticResource ScrollBarThumb05}" Margin="0,13,0,13" />
            </Track.Thumb>
            <Track.IncreaseRepeatButton>
                <RepeatButton Command="ScrollBar.PageDownCommand" Style="{StaticResource ScrollBarPageButton05}" />
            </Track.IncreaseRepeatButton>
        </Track>

        <RepeatButton Grid.Row="2" Height="56" Command="ScrollBar.LineDownCommand" Style="{StaticResource ScrollBarBottomButton05}" />

    </Grid>
</ControlTemplate>

<Style x:Key="ScrollBar05" TargetType="{x:Type ScrollBar}">
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="Stylus.IsFlicksEnabled" Value="True" />
    <Setter Property="IsEnabled" Value="true" />
    <Style.Triggers>
        <Trigger Property="Orientation" Value="Vertical">
            <Setter Property="Width" Value="56" />
            <Setter Property="Height" Value="Auto" />
            <Setter Property="Template" Value="{StaticResource VerticalScrollBar05}" />
        </Trigger>
    </Style.Triggers>
</Style>

<Style x:Key="ScrollViewer05" TargetType="{x:Type ScrollViewer}">
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="IsEnabled" Value="true" ></Setter>
    <Setter Property="VerticalScrollBarVisibility" Value="Visible"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <ScrollContentPresenter Grid.Column="0" Grid.Row="0" />
                    <ScrollBar Name="PART_VerticalScrollBar"
                               Grid.Column="1"
                               Maximum="{TemplateBinding ScrollableHeight}"
                               Orientation="Vertical"
                               Value="{TemplateBinding VerticalOffset}"
                               Style="{DynamicResource ResourceKey=ScrollBar05}"
                               ViewportSize="{TemplateBinding ViewportHeight}"
                               Visibility="Visible" />
                    <ScrollBar Name="PART_HorizontalScrollBar"
                               Grid.Row="1"
                               Grid.Column="0"
                               Maximum="{TemplateBinding ScrollableWidth}"
                               Orientation="Horizontal"
                               Value="{TemplateBinding HorizontalOffset}"
                               ViewportSize="{TemplateBinding ViewportWidth}"
                               Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="ScrollViewer05Left" TargetType="{x:Type ScrollViewer}">
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <ScrollContentPresenter Grid.Column="1" Grid.Row="0" />
                    <ScrollBar Name="PART_VerticalScrollBar"
                               Grid.Column="0"
                               Maximum="{TemplateBinding ScrollableHeight}"
                               Orientation="Vertical"
                               Value="{TemplateBinding VerticalOffset}"
                               Style="{DynamicResource ResourceKey=ScrollBar05}"
                               ViewportSize="{TemplateBinding ViewportHeight}"
                               Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
                    <ScrollBar Name="PART_HorizontalScrollBar"
                               Grid.Row="1"
                               Grid.Column="0"
                               Maximum="{TemplateBinding ScrollableWidth}"
                               Orientation="Horizontal"
                               Value="{TemplateBinding HorizontalOffset}"
                               ViewportSize="{TemplateBinding ViewportWidth}"
                               Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Стиль применяется через привязку staticresource.

<DockPanel Name="mainDock" LastChildFill="True" >
    <local:HeaderControl DockPanel.Dock="Top" Height="100" x:Name="HeaderBar"></local:HeaderControl>
    <local:StatusBarControl DockPanel.Dock="Bottom" Height="56" x:Name="StatusBar"></local:StatusBarControl>
    <DockPanel d:DesignHeight="612" VerticalAlignment="Top" Name="MidDock">
        <StackPanel DockPanel.Dock="left" Name="Leftmenu" Background="{StaticResource MedBlue}" Width="300" d:DesignHeight="612" VerticalAlignment="Stretch"/>
        <ScrollViewer Name="midScroll1" Style="{StaticResource ScrollViewer05}" VerticalScrollBarVisibility="Hidden" d:DesignHeight="612" Width="Auto" CanContentScroll="True" Height="Auto">
            <StackPanel DockPanel.Dock="left" VerticalAlignment="Stretch" Name="Midmenu" Background="{StaticResource LtBlue}" Width="300" CanVerticallyScroll="True">
            </StackPanel>
        </ScrollViewer>
        <StackPanel DockPanel.Dock="right" Name="Metric" Background="White" Width="auto">
            <local:MetricControl Margin="10"></local:MetricControl>
        </StackPanel>
    </DockPanel>

</DockPanel>

Спасибо.

04.04.2014

Ответы:


1

Я не думаю, что он отключен, просто контента недостаточно для прокрутки. Я заработал, добавив высоту 1200 в панель стека «Мидменю» внутри средства просмотра прокрутки. Красивый шаблон, выглядит красиво, просто нужно перевернуть стрелку прокрутки вниз, чтобы на самом деле указывать вниз.

введите здесь описание изображения

04.04.2014
  • Чем я что-то не так делаю. Во-первых, я вообще не понимаю стрел. Что касается содержимого, то оно создается динамически в классе С# с добавлением пользовательских элементов управления. Есть по крайней мере два случая, когда содержимое заполнено больше, чем выделенная высота. Если я удалю стиль из средства просмотра прокрутки, я получу нормально выглядящую, отлично работающую полосу прокрутки. Это как бы указывает мне на то, что он где-то отключен. Такого рода дает мне идею, теперь. Смущает ли это height=auto в средстве просмотра прокрутки? Стрелка, указывающая вниз, идентична верхней, мне нужно направить другую. 05.04.2014
  • Ой. Я только что перечитал ваш код. Я думаю, что VerticalScrollBarVisibility" Value="Visible" в стиле переопределяется VerticalScrollBarVisibility="Hidden" в самом средстве просмотра прокрутки. Вместо этого я бы привязал это к свойству в модели представления. 05.04.2014
  • Вот точный код xaml, который я использовал, чтобы заставить его работать. Вставить ссылку. Единственное, что я изменил, — это высоту панели стека для имитации контента, жестко закодировал кучу цветовых ресурсов и удалил ссылки на пространство имен d:. Надеюсь это поможет 05.04.2014
  • Спасибо. Я попробую и дам вам знать. 06.04.2014
  • Я понял это после очень долгого исследования. ‹ScrollContentPresenter Grid.Column=0 Grid.Row=0 CanContentScroll=True/› Несмотря на то, что у меня был CanContentScroll в средстве просмотра, мне все же пришлось поместить его в таблицу стилей. Возможно, перезапись стиля по умолчанию конфликтует. 08.04.2014

  • 2

    Для тех, кто может столкнуться с этой проблемой

    В стиле scrollviewer это сработало для меня.

    08.04.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..