2016-02-16 5 views
2

WPF фокусирование Drivin меня гайки :(WPF: Не могу понять фокус

В совершенно новый тест WPF проект, у меня есть это окно ...

<Window x:Class="MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="1*"/> 
     </Grid.ColumnDefinitions> 
     <TextBox Grid.Column="0" x:Name="txtStatic" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 
     <StackPanel Grid.Column="1" Focusable="False"> 
      <Border BorderBrush="LightGray" BorderThickness="0 0 1 0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Focusable="False"> 
       <ContentControl x:Name="con" /> 
      </Border> 
     </StackPanel> 
    </Grid> 
</Window> 

И это .. отделенного кода .

Class MainWindow 

    Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded 
     Dim txt As New TextBox 
     txt.Name = "txtDynamic" 
     Me.con.Content = txt 
     txt.Focus() 
    End Sub 

End Class 

Два вопроса ...

  1. Когда запущен проект выше, отображается MainWindow, почему я не могу начать вводить текстовое поле, созданное во время выполнения (txtDynamic)? Это похоже на то, что у него уже есть фокус.

  2. Если я запустил проект и нажал текстовое поле txtStatic, а затем нажмите клавишу TAB, он будет выглядеть как текстовое поле динамического (txtDynamic), но я не могу набрать - мне нужно нажать TAB еще раз. Почему это?

Заранее спасибо.

ответ

0

Изменения вы ContentControl Focusable ложному

<ContentControl Focusable="False" x:Name="con" /> 

и в коде добавить, жаль, что в C#

var txt = new TextBox(); 
    txt.Name = "txtDynamic"; 
    con.Content = txt; 
    txt.Focus(); 

    Dispatcher.BeginInvoke(
    DispatcherPriority.ContextIdle, 
    new Action(delegate() 
    { 
     txt.Focus(); 
    })); 
+0

Вау спасибо ... Я думал, что это было бы легко перейти от WinForms к WPF ... снова подумайте;) ... Еще раз спасибо !!! – MojoDK

Смежные вопросы