Есть странная проблема здесь. Я создал шаблон для 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 обе команды успешно обрабатываются!