ここで奇妙な問題が発生しました。標準テンプレートに基づいて ListBox のテンプレートを作成しました (つまり、以下に示す以外は何も変更していません)。
ScrollViewer (標準の ListBox テンプレートの一部) を左右にスクロールできるように、テンプレートの横にいくつかのボタンを追加しようとしています。問題は、ScrollBar.PageLeftCommand OR 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によれば、両方のコマンドが正常に処理されます!