Некорректная работа ScrollBar в WPF

146
15 января 2020, 21:30

После переопределения стилей ScrollBar в WPF при перетаскивании ползунка мышкой, scrollbar начинает некорректно себя вести, а именно не реагирует на прокручивание колесиком мышки, хотя до момента перетаскивания все работает нормально. каким образом можно решить данную проблему? Xaml код разметки стилей:

<!--  Переопределение Thumb  -->
<Style x:Key="@Style/Thumb" TargetType="{x:Type Thumb}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Rectangle x:Name="Thumbs" Fill="{StaticResource ResourceKey=@SolidColorBrush/MegaGray}" />
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource ResourceKey=@Storyboard/ScrollbarMouseOver}" />
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <BeginStoryboard Storyboard="{StaticResource ResourceKey=@Storyboard/ScrollbarMouseDown}" />
                        </Trigger.ExitActions>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<!--  Переопределение  ScrollBar  -->
<Style x:Key="@Style/ScrolBar" TargetType="{x:Type ScrollBar}">
    <Setter Property="Cursor" Value="Arrow" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollBar}">
                <Grid Background="{StaticResource ResourceKey=@SolidColorBrush/DoubleGray60}">
                    <Track Name="PART_Track" IsDirectionReversed="True">
                        <Track.Thumb>
                            <Thumb Style="{StaticResource ResourceKey=@Style/Thumb}" />
                        </Track.Thumb>
                    </Track>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="Orientation" Value="Horizontal">
                        <Setter Property="Height" Value="10" />
                    </Trigger>
                    <Trigger Property="Orientation" Value="Vertical">
                        <Setter Property="Width" Value="10" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<!--  Переопределение  ScrollViewer  -->
<Style x:Key="@Style/ScrollViewer" TargetType="{x:Type ScrollViewer}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="auto" />
                    </Grid.ColumnDefinitions>
                    <ScrollContentPresenter Grid.Column="0" />
                    <ScrollBar
                        Grid.Column="1"
                        Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}"
                        Minimum="0"
                        Style="{StaticResource ResourceKey=@Style/ScrolBar}"
                        ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}"
                        Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}"
                        Value="{Binding Path=VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Answer 1

Было найдено простое решение. В определение стиля ScrollViewer для Scrollbar добавить атрибут x:Name="PART_VerticalScrollBar

<ScrollBar
                    Grid.Column="1"
                    Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}"
                    Minimum="0"
                    Style="{StaticResource ResourceKey=@Style/ScrolBar}"
                    ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}"
                    Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}"
                    Value="{Binding Path=VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" />
READ ALSO
Приложение на asp.net mvc + angular 7

Приложение на asp.net mvc + angular 7

Начинаю изучать angularСкачал node

143
использование ConcurentBag при работе с БД

использование ConcurentBag при работе с БД

Как можно использовать ConcurrentBag при работе с БД? и в каких случаях это нужноБольшинство примеров рассмотрены с добавлением string/int значений

143
Как убрать квадратики по рамке datagridview в Metro Framework?

Как убрать квадратики по рамке datagridview в Metro Framework?

Как убрать в datagridview tabs вот эти квадратики мини рамка сколько гуглил смотрел документацию ничего не нашел

124