Почему одна из моих команд ScrollViewer не работает в шаблоне ListBox?

Здесь есть странная проблема. Я создал шаблон для ListBox на основе стандартного шаблона (то есть я не изменил ничего, кроме того, что я указал ниже).

Я пытаюсь добавить пару кнопок сбоку шаблона, чтобы прокручивать ScrollViewer (который является частью стандартного шаблона ListBox) влево и вправо. Проблема в том, что он распознает только ScrollBar.PageLeftCommand ИЛИ ScrollBar.PageRightCommand... Я не могу получить его в ответ на оба.

Другими словами, если я нажму правую кнопку, она перейдет на страницу справа, но если я нажму левую кнопку, она ничего не сделает. В зависимости от порядка расположения кнопок в XAML, который будет определять, какая команда работает, а какая нет (похоже, команда работает для последней кнопки, определенной в XAML).

<ControlTemplate TargetType="{x:Type s:SurfaceListBox}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.137*"/>
            <ColumnDefinition Width="0.726*"/>
            <ColumnDefinition Width="0.137*"/>
        </Grid.ColumnDefinitions>
        <Border x:Name="Border"  Grid.ColumnSpan="1" Grid.Column="1">
            <s:SurfaceScrollViewer x:Name="scrollViewer" >
                <ItemsPresenter />
            </s:SurfaceScrollViewer>
        </Border>
        <s:SurfaceButton x:Name="rightScroll" Content="&gt;" Command="ScrollBar.PageRightCommand" CommandTarget="{Binding ElementName=scrollViewer}" Grid.Column="2" />
        <s:SurfaceButton x:Name="leftScroll" Content="&lt;" Command="ScrollBar.PageLeftCommand" CommandTarget="{Binding ElementName=scrollViewer}"/>
    </Grid>
</ControlTemplate>

(Да, это использует классы Surface, но я пробовал это делать с обычными классами, и у меня такое же поведение...)

Я видел, как он работает с Snoop, но он ничего мне не говорит о командах - согласно Snoop обе команды успешно обрабатываются!

2 ответа

Решение

Хорошо, я солгал. Я не пытался заменить SurfaceScrollViewer с нормальным ScrollViewer,

Когда я делаю это, кажется, работает. Так что, если у кого-то нет других предложений, кажется, что SurfaceScrollViewer имеет по крайней мере две ошибки (второе существо, которое я нашел, это ScrollBar не реагировать на команды, когда они скрыты в отличие от обычных ScrollViewer).

Снова сорвали.

:-(

Стандартные элементы управления WPF не поддерживают все события с SurfaceScrollViewer, однако есть другие элементы управления, упакованные с SurfaceScrollViewer, которые поддерживают некоторые события, такие как Click.

Проблема в том, что SurfaceScrollViewer принимает не только сенсорный ввод на полосе прокрутки, но и сам контент.

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