Почему одна из моих команд 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=">" Command="ScrollBar.PageRightCommand" CommandTarget="{Binding ElementName=scrollViewer}" Grid.Column="2" />
<s:SurfaceButton x:Name="leftScroll" Content="<" Command="ScrollBar.PageLeftCommand" CommandTarget="{Binding ElementName=scrollViewer}"/>
</Grid>
</ControlTemplate>
(Да, это использует классы Surface, но я пробовал это делать с обычными классами, и у меня такое же поведение...)
Я видел, как он работает с Snoop, но он ничего мне не говорит о командах - согласно Snoop обе команды успешно обрабатываются!
2 ответа
Хорошо, я солгал. Я не пытался заменить SurfaceScrollViewer
с нормальным ScrollViewer
,
Когда я делаю это, кажется, работает. Так что, если у кого-то нет других предложений, кажется, что SurfaceScrollViewer
имеет по крайней мере две ошибки (второе существо, которое я нашел, это ScrollBar
не реагировать на команды, когда они скрыты в отличие от обычных ScrollViewer
).
Снова сорвали.
:-(
Стандартные элементы управления WPF не поддерживают все события с SurfaceScrollViewer, однако есть другие элементы управления, упакованные с SurfaceScrollViewer, которые поддерживают некоторые события, такие как Click.
Проблема в том, что SurfaceScrollViewer принимает не только сенсорный ввод на полосе прокрутки, но и сам контент.