2011-08-23 46 views
1

我有一個包含文本框和按鈕的WPF用戶控件。我有一個包含網格的表格,其中 第一行包含文本框 第二行包含上述用戶控件,第三行包含另一個文本框。 當窗體加載時,焦點被設置爲第一行的文本框。 當焦點設置爲用戶控件時,我需要將焦點設置到用戶控件中的文本框中。並在選項卡上將焦點設置爲用戶控件內的按鈕。當包含WPF時,焦點未設置爲子控件用戶控件獲取焦點

回答

0

您的代碼是否遵循MVVM模式?如果是,直接在後面的視圖代碼中寫入事件處理程序可能不是一個好主意,它打破了MVVM中關注點的分離。相反,創建行爲類並在行爲中編寫事件處理程序,並將行爲綁定到視圖中的用戶控件。

示例代碼如下所示。我有一個畫布和內部cavas我有三個文本框。當cavas加載時,我需要在第一個文本框中設置焦點。類似於您的場景。

行爲的代碼

public class CanvasLoadedBehavior : Behavior<Canvas> 
{ 
    private Canvas _canvas; 
    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     _canvas = AssociatedObject as Canvas; 
     if (_canvas.Name == "ReturnRefundCanvas") 
     { 

      _canvas.Loaded += _canvas_Loaded; 
     } 


    } 

    void _canvas_Loaded(object sender, RoutedEventArgs e) 
    { 
     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); 
     } 

    } 

} 

查看代碼的結合卡瓦酒到行爲。

<Canvas Name="ReturnRefundCanvas" Height="200" Width="1466" DataContext="{Binding RefundSearchViewModel}"> 
       <i:Interaction.Behaviors> 
        <b:CanvasLoadedBehavior /> 
       </i:Interaction.Behaviors> 
       <uc:Keyboard Canvas.Left="973" Canvas.Top="111" ToolTip="Keyboard" RenderTransformOrigin="-2.795,9.787"></uc:Keyboard> 
       <Label Style="{StaticResource Devlbl}" Canvas.Left="28" Content="Return and Refund Search" Canvas.Top="10" /> 
       <Image Height="30" Width="28" Canvas.Top="6" Canvas.Left="5" Source="pack://application:,,,/HomaKiosk;component/images/searchF.png"> 
        <Image.OpacityMask> 
         <ImageBrush ImageSource="pack://application:,,,/HomaKiosk;component/images/searchF.png"/> 
        </Image.OpacityMask> 
       </Image> 

       <Separator Height="4" Canvas.Left="6" Margin="0" Canvas.Top="35" Width="1007"/> 

       <ContentControl Canvas.Top="45" Canvas.Left="21" 
        ContentTemplate="{StaticResource ErrorMsg}" 
        Visibility="{Binding Error, Converter={c:StringNullOrEmptyToVisibilityConverter}}" 
        Content="{Binding Error}" Width="992"></ContentControl> 

       <Label Style="{StaticResource Devlbl}" Canvas.Left="29" Name="FirstName" Content="First Name" Canvas.Top="90" /> 
       <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" 

        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 Style="{StaticResource Devlbl}" Canvas.Left="480" Content="Receipt No" Canvas.Top="90" /> 
          <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=''}" 
        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 Style="{StaticResource Devlbl}" Canvas.Left="710" Content="Duration" Canvas.Top="79" />--> 
       <!--<ComboBox AllowDrop="True" Canvas.Left="710" ToolTip="Duration" Canvas.Top="107" Width="205" TabIndex="1004" 
        Style="{StaticResource CommonComboBox}"  
        ItemsSource="{Binding Durations}" DisplayMemberPath="Description" SelectedValuePath="Id" SelectedValue="{Binding SelectedDate, Mode=TwoWay}"> 

       </ComboBox>--> 

       <Button Content="Search" Style="{StaticResource MyButton}" ToolTip="Search" 
        Canvas.Top="116" Canvas.Left="710" Cursor="Hand" 
        Command="{Binding SearchCommand}" TabIndex="2001"> 
       </Button> 
       <Button Content="Clear" Style="{StaticResource MyButton}" ToolTip="Clear" 
        Canvas.Top="116" Canvas.Left="840" Cursor="Hand" 
        Command="{Binding ClearCommand}" TabIndex="2002"> 
       </Button> 
       <Image Height="25" Width="25" Canvas.Top="175" Canvas.Left="25" Source="pack://application:,,,/HomaKiosk;component/images/chkpending.png"/> 
       <Label Style="{StaticResource LegendLbl}" Canvas.Left="50" Content="Check Returned and Payment Pending" Canvas.Top="178" /> 
       <Image Height="25" Width="25" Canvas.Top="175" Canvas.Left="300" Source="pack://application:,,,/HomaKiosk;component/images/chkrepaid.png"/> 
       <Label Style="{StaticResource LegendLbl}" Canvas.Left="325" Content="Repaid" Canvas.Top="178" /> 
       <Image Height="25" Width="25" Canvas.Top="175" Canvas.Left="395" Source="pack://application:,,,/HomaKiosk;component/images/refund.png"/> 
       <Label Style="{StaticResource LegendLbl}" Canvas.Left="415" Content="Refunded" Canvas.Top="178" /> 
       </Canvas> 
相關問題