Как показать программно FocusVisualStyle?

После попыток я мог сказать, что FocusVisualStyle активируется только с помощью клавиатуры (клавиши Tab и стрелки).

Попробуйте сделать так, чтобы FocusVisualStyle применялся после загрузки компонента, это невозможно сделать, есть простой способ обойти эту проблему?

Я нашел это:
- визуальный фокус не отображается при программной навигации по фокусу
- Как кнопки WPF решают отображать FocusVisualStyle?
- http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/99856840-f8ef-4547-9150-c4c46ec2f3df

Но ни один не показывает однозначного решения (без перезаписи компонента), а написать не смог, может кто поможет?


person J. Lennon    schedule 20.05.2013    source источник


Ответы (1)


Я не совсем уверен, что понимаю вашу проблему, но я попробовал пример по одной из ссылок, и мне удалось переместить фокус на следующий компонент из кода точно так же, как вы сделали бы это с помощью клавиатуры. Вот код.

<Window x:Class="WpfApplication1.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"
        xmlns:local="clr-namespace:WpfApplication1" Loaded="OnLoaded"
        >
    <StackPanel Margin="10">
        <TextBox Margin="10" x:Name="a" >A</TextBox>
        <TextBox Margin="10" x:Name="b" >B</TextBox>
        <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) {
        a.Focus();
    }

    private void OnClick(object sender, RoutedEventArgs e) {
        var request = new TraversalRequest(FocusNavigationDirection.Next);
        var elementWithFocus = FocusManager.GetFocusedElement(FocusTest) as UIElement;
        if (elementWithFocus != null)
            elementWithFocus.MoveFocus(request);
    }
}
person Jatin    schedule 20.05.2013
comment
попробуйте сделать так, чтобы FocusVisualStyle применялся после загрузки компонента, это невозможно сделать и это моя проблема - person J. Lennon; 20.05.2013
comment
Я неправильно понял вашу проблему. Теперь я вижу вашу проблему. Очень жаль. - person Jatin; 20.05.2013