ScrollBarsのContextMenuを置き換えようとしていますが、次のコードを記述しました。
<ContextMenu x:Key="ScrollBarContextMenu" x:Shared="True">
<MenuItem Header="Scroll _Here" Name="SH" Command="ScrollBar.ScrollHereCommand" />
<Separator/>
<MenuItem Header="_Top" Name="T" Command="ScrollBar.ScrollToTopCommand" />
<MenuItem Header="_Bottom" Name="B" Command="ScrollBar.ScrollToBottomCommand" />
<Separator/>
<MenuItem Header="Page _Up" Name="PU" Command="ScrollBar.PageUpCommand" />
<MenuItem Header="Page _Down" Name="PD" Command="ScrollBar.PageDownCommand" />
<Separator/>
<MenuItem Header="Scroll U_p" Name="SU" Command="ScrollBar.LineUpCommand" />
<MenuItem Header="Scroll Dow_n" Name="SD" Command="ScrollBar.LineDownCommand" />
</ContextMenu>
<Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="ContextMenu" Value="{DynamicResource ScrollBarContextMenu}"/>
<Style.Triggers>
<Trigger Property="Orientation" Value="Horizontal">
<Setter Property="Width" Value="Auto"/>
<Setter Property="Height" Value="18" />
<Setter Property="Template" Value="{StaticResource HorizontalScrollBar}" />
</Trigger>
<Trigger Property="Orientation" Value="Vertical">
<Setter Property="Width" Value="18"/>
<Setter Property="Height" Value="Auto" />
<Setter Property="Template" Value="{StaticResource VerticalScrollBar}" />
</Trigger>
</Style.Triggers>
</Style>
ContextMenuが設定されますが、動作がおかしいです。最初は、すべてのメニュー項目が無効になっています。スクロールバーをスクロールすると、永遠に無効のままになるScrollHereコマンドを除いて、すべてが有効になります。また、オプション、つまり「Page Up」オプションをクリックすると、スクロールバーをホストしているコントロールがフォーカスされている場合にのみ機能します(自動的にフォーカスされません)。誰かがこれらの問題を解決する方法を知っていますか?
編集:
私の推測では、おそらくデフォルトのContextMenuがOpening
イベントを処理し、コントロールに焦点を合わせ、さらにマウスでクリックされたポイントの場所をどこかに保存します。しかし、どうすればこの機能をXAMLファイルに入れることができますか?