2013-01-12 40 views
3

每當我嘗試以編程方式移動焦點時,焦點視覺(虛線矩形)不會顯示。當以編程方式導航焦點時,焦點視覺不會顯示

可以做些什麼來強制這個視覺顯示?

<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

如果在KeyboardNavigation的ShowFocusVisual看(在反射/ ilspy),你會發現,這個框架將只顯示它如果最後的輸入是從鍵盤(或如果基於KeyboardCues內部靜態屬性系統參數信息爲真)。所以我不認爲有一種好方法可以做到這一點,即使用反射來臨時設置屬性或異步聚焦元素並強制執行鍵盤動作(可能使用Winforms SendKeys或keybd_event api),但我不建議。