4

プログラムでフォーカスを移動しようとすると、フォーカスビジュアル(点線の長方形)が表示されません。

このビジュアルを強制的に表示するにはどうすればよいですか?

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="OnLoaded">
    <StackPanel>
        <TextBlock x:Name="a" Focusable="True">A</TextBlock>
        <TextBlock Focusable="True">B</TextBlock>
        <Button Focusable="False" Click="OnClick">Move Focus</Button>
    </StackPanel>
</Window>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        Keyboard.Focus(a);
    }

    private void OnClick(object sender, RoutedEventArgs e)
    {
        var request = new TraversalRequest(FocusNavigationDirection.Next);
        var elementWithFocus = Keyboard.FocusedElement as UIElement;
        if (elementWithFocus != null)
            elementWithFocus.MoveFocus(request);
    }
}
4

1 に答える 1

4

KeyboardNavigationのShowFocusVisualを(reflector / ilspyで)見ると、フレームワークは最後の入力がキーボードからのものである場合(または、KeyboardCuesシステムパラメーター情報に基づく内部静的プロパティがtrueである場合)にのみ表示されることがわかります。したがって、リフレクションを使用してそのプロパティを一時的に設定するか、要素を非同期的にフォーカスしてキーボードアクションを強制する(おそらくwinformsSendKeysまたはkeybd_eventapiを使用する)以外にこれを行う良い方法はないと思いますが、どちらもお勧めしません。

于 2013-01-14T13:51:34.567 に答える