Почему одна из моих команд ScrollViewer не работает в шаблоне ListBox? - PullRequest
0 голосов
/ 09 сентября 2010

Есть странная проблема здесь. Я создал шаблон для 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 ]

2 голосов
/ 20 марта 2011

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

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

0 голосов
/ 09 сентября 2010

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

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

Свернул снова.

: - (

...