その周りのスクロールビューア内に Textblock があります。私のアプリケーションはリモートで完全に制御されるため、このコンテキストではナビゲーションは上下左右のキーで実行されます。
Textblock に移動できますが、そこに閉じ込められます。KeyboardNavigation.DirectionalNavigation="Continue" をすべてのコントロールに配置しようとしましたが、喜びはありません。
次に、スクロールバーまたはスクロールビューアーを拡張するカスタム コントロールを作成することを考えました。スクロールバーを拡張する場合、次のようにキーダウンをオーバーライドできます。
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if (this.Orientation == Orientation.Vertical)
{
if (e.Key == Key.Up)
{
if (this.Value == this.Minimum)
{
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));
e.Handled = true;
}
}
if (e.Key == Key.Down)
{
if (this.Value == this.Maximum)
{
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
e.Handled = true;
}
}
if (e.Key == Key.Left)
{
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Left));
e.Handled = true;
}
if (e.Key == Key.Right)
{
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Right));
e.Handled = true;
}
}
if (this.Orientation == Orientation.Horizontal)
{
if (e.Key == Key.Left)
{
if (this.Value == this.Minimum)
{
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Left));
e.Handled = true;
}
}
if (e.Key == Key.Right)
{
if (this.Value == this.Maximum)
{
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Right));
e.Handled = true;
}
}
if (e.Key == Key.Up)
{
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));
e.Handled = true;
}
if (e.Key == Key.Down)
{
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
e.Handled = true;
}
}
base.OnPreviewKeyDown(e);
}
}
問題は、ScrollViewer スクロールバーを変更してカスタム スクロールバーを使用する方法がわからないこと、またはキーが押されたときに上記のコードが起動することさえわからないことです。テキストブロックとスクロールビューアがイベントを見るコントロールになると思います。
上記のコードと同様のことを行う方法はありますが、Scrollviewers のコード ビハインドでしょうか?