2015-04-21 2 views
1

Я загрузил стороннее автозаполнение текстового поля и ссылался на него в моем проекте. У меня есть 3 автозаполненных текстовых поля FirstName, LastName, ReceiptNo. Когда загружается форма, я хочу, чтобы первое имя было в фокусе. Как достичь этого.Как установить фокус в боковом текстовом поле автозаполнения

Я попробовал несколько шагов, как

//Eventhandler while form loads 
private void Page_Loaded_1(object sender, RoutedEventArgs e) 
{ 
    FirstName.Focus(); 
} 

или

//Eventhandler while autocomplete textbox loads 
void FirstName_GotFocus(object sender, RoutedEventArgs e) 
{ 
    FirstName.Focus(); 
} 

Я также попытался создать Ий IsVisible свойство и связывание его автозаполнение FirstName текстового поля в Xaml, но это не работает. Любая помощь будет оценена.

Моего кода XAML приводятся ниже

<wpf:AutoCompleteTextBox Style="{StaticResource AutoComp}" 
          Height="32" 
          Canvas.Left="33" 
          ToolTip="First Name" 
          Canvas.Top="120" 
          Width="205" 
          Padding="10,5" 
          TabIndex="1001" 
          VerticalAlignment="Top" 
          Loaded="FirstName_GotFocus"      
          Watermark="" 
          IconPlacement="Left" 
          IconVisibility="Visible" 
          Delay="100" 
          Text="{Binding FirstName, Mode=TwoWay, TargetNullValue=''}" 
          Provider="{Binding FirstNameSuggestions}"> 
    <wpf:AutoCompleteTextBox.ItemTemplate> 
     <DataTemplate> 
      <Border Padding="5"> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Text="{Binding}" 
           FontWeight="Bold" /> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
    </wpf:AutoCompleteTextBox.ItemTemplate> 
</wpf:AutoCompleteTextBox> 

<Label Style="{StaticResource Devlbl}" 
     Canvas.Left="250" 
     Content="Last Name" 
     Canvas.Top="90" /> 
    <wpf:AutoCompleteTextBox Style="{StaticResource AutoComp}" 
          Height="32" 
          ToolTip="Last Name" 
          Canvas.Left="250" 
          Canvas.Top="120" 
          Width="205" 
          Padding="10,5" 
          TabIndex="1002" 
          VerticalAlignment="Top" 
          Watermark="" 
          IconPlacement="Left" 
          IconVisibility="Visible" 
          Delay="100" 
          Text="{Binding LastName, Mode=TwoWay, TargetNullValue=''}" 
          Provider="{Binding LastNameSuggestions}"> 
     <wpf:AutoCompleteTextBox.ItemTemplate> 
      <DataTemplate> 
       <Border Padding="5"> 
        <StackPanel Orientation="Vertical"> 
         <TextBlock Text="{Binding}" 
            FontWeight="Bold" /> 
        </StackPanel> 
       </Border> 
      </DataTemplate> 
     </wpf:AutoCompleteTextBox.ItemTemplate> 
    </wpf:AutoCompleteTextBox> 
</Label> 
<Label Style="{StaticResource Devlbl}" 
     Canvas.Left="480" 
     Content="Receipt No" 
     Canvas.Top="90" /> 
    <!--<TextBox Canvas.Left="480" 
      ToolTip="Receipt No" 
      Canvas.Top="107" 
      Width="205" 
      MaxLength="10" 
      TabIndex="1003" 
      Style="{StaticResource CommonTextBox}"  
      Text="{Binding ReceiptNo,TargetNullValue=''}"> 
     <i:Interaction.Behaviors> 
      <b:AllowableCharactersTextBoxBehavior RegularExpression="^[0-9]+$" MaxLength="10" /> 
     </i:Interaction.Behaviors> 
    </TextBox>--> 
    <wpf:AutoCompleteTextBox Style="{StaticResource AutoComp}" 
          Height="32" 
          ToolTip="Receipt No" 
          Canvas.Left="480" 
          Canvas.Top="120" 
          Width="205" 
          Padding="10,5" 
          TabIndex="1002" 
          VerticalAlignment="Top" 
          Watermark="" 
          IconPlacement="Left" 
          IconVisibility="Visible" 
          Delay="100" 
          Text="{Binding ReceiptNo, Mode=TwoWay, TargetNullValue=''}" 
          e:FocusExtension.IsFocused="{Binding IsFocused, Mode=TwoWay }" 
          Provider="{Binding ReceiptIdSuggestions}"> 
     <wpf:AutoCompleteTextBox.ItemTemplate> 
      <DataTemplate> 
       <Border Padding="5"> 
        <StackPanel Orientation="Vertical" > 
         <TextBlock Text="{Binding}" 
            FontWeight="Bold"> 
         </TextBlock> 
        </StackPanel> 
       </Border> 
      </DataTemplate> 
     </wpf:AutoCompleteTextBox.ItemTemplate> 
     <i:Interaction.Behaviors> 
      <b:AllowableCharactersTextBoxBehavior RegularExpression="^[0-9]+$" MaxLength="15" /> 
     </i:Interaction.Behaviors> 
    </wpf:AutoCompleteTextBox> 
</Label> 

ответ

1

Вашей первой попытки очень близко. Попробуйте сделать следующее в обработчике Page_Loaded_1 событий

this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));

(Примечание - MoveFocus является метод в классе окна, это не то, что вам нужно реализовать)

Вы должны определить ваши текстовые поля, чтобы иметь вкладку -indices. После загрузки страницы TraversalRequest будет фокусироваться на первом элементе управления с индексом. Если индексы индексов не определены, я верю, что это придаст фокус вершине иерархии пользовательского интерфейса, поэтому технически главное окно получит фокус в этом случае.

Для справки, вот MSDN link для всех FocusNavigationDirection вариантов.

+0

Спасибо, что сообщили мне о методе MoveFocus и FocusNavigatgionDirection. Я изменил код и его работоспособность. Я не могу поддержать ваш ответ. У меня недостаточно репутации. Спасибо, в любом случае. – BSG

0

Я изменил код, как показано ниже, и его работоспособность. Я добавил каву в качестве контейнера и поместил свой авто полный текстовый ящик внутри холста.

FocusNavigationDirection focusDirection = FocusNavigationDirection.Next; 

     // MoveFocus takes a TraveralReqest as its argument. 
     TraversalRequest request = new TraversalRequest(focusDirection); 
     UIElement elementWithFocus = Keyboard.FocusedElement as UIElement; 
     if (elementWithFocus != null) 
     { 
      elementWithFocus.MoveFocus(request); 
     }