有关TabNavigation的方式【项目】

问题

外层MainWindow.xaml里有一个Container(ContentPresenter),调用一个CreateJob 页面,里面是一行行的<TextBlock>,最后一个是<DataPicker>。

因为会调用不同的子页面,这个Containner(ContentPresenter)需要写清TabNavigation的方式,这里是Local

<ContentPresenter KeyboardNavigation.TabNavigation="Local"

                      Grid.Row="2"

                      Content="{Binding CurrentViewModel}">

而里面这些Textblock设置了一定顺序的Index,最后一个是<DataPicker>的index是最大的。

但是这个datapicker是由一个DataTemplate组成的,其再内层是一个TextBlock和一个Button组成。

问题是KeyboardTab不会走到内层的DataPicker的Button中。

解决

1:检查内层DataPicker的DataTemplate的Button有没有设置Focusable= false

2:外层<DataPicker>要是KeyboardNavigation.TabNavigation="Continue"

<DatePicker Grid.Row="5"

                      Grid.Column="1"

                      Margin="10,5,0,5"

                      Focusable="True"

                      KeyboardNavigation.TabIndex="11"

                      KeyboardNavigation.TabNavigation="Continue"

                      Style="{StaticResource Base_DatePicker_Template}"

                      Text="{Binding CurrentJob.RevisionDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

                      HorizontalAlignment="Left"

                      />
View Code

给出CreateJob页面空间的内部完整设置:

<TextBox Grid.Column="1"

                   MaxLength="64"

                   Margin="10,5,0,5"

                   KeyboardNavigation.TabIndex="0"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.Client, UpdateSourceTrigger=PropertyChanged}" />





          <TextBlock Grid.Row="1"

                     Margin="10,5,0,5"

                     HorizontalAlignment="Right"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Field/Lease" />

          <TextBox Grid.Row="1"

                   Grid.Column="1"

                   MaxLength="64"

                   Margin="10,5,0,5"

                   KeyboardNavigation.TabIndex="1"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.FieldLease, UpdateSourceTrigger=PropertyChanged}" />



          <TextBlock Grid.Row="2"

                     Margin="10,5,0,5"

                     HorizontalAlignment="Right"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Well Name" />

          <TextBox Grid.Row="2"

                   Grid.Column="1"

                   MaxLength="40"

                   Margin="10,5,0,5"

                   KeyboardNavigation.TabIndex="2"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.WellName, UpdateSourceTrigger=PropertyChanged}" />



          <TextBlock Grid.Row="3"

                     Margin="10,5,0,5"

                     HorizontalAlignment="Right"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Company Rep" />

          <TextBox Grid.Row="3"

                   Grid.Column="1"

                   MaxLength="64"

                   Margin="10,5,0,5"

                   KeyboardNavigation.TabIndex="3"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.CompanyRep, UpdateSourceTrigger=PropertyChanged}" />



          <TextBlock x:Name="AreaCountryLabel"

                     Grid.Row="4"

                     Margin="10,5,0,5"

                     HorizontalAlignment="Right"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Rig Name" />

          <TextBox Grid.Row="4"

                   Grid.Column="1"

                   MaxLength="64"

                   Margin="10,5,0,5"

                   KeyboardNavigation.TabIndex="4"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.RigName, UpdateSourceTrigger=PropertyChanged}" />



          <TextBlock Grid.Row="5"

                     Margin="10,5,0,5"

                     HorizontalAlignment="Right"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Rig Type" />

          <TextBox Grid.Row="5"

                   Grid.Column="1"

                   MaxLength="32"

                   Margin="9.999,6.067,0,6.067"

                   KeyboardNavigation.TabIndex="5"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.RigType, UpdateSourceTrigger=PropertyChanged}" />





        <TextBlock Grid.Row="6"

                     Margin="0,5"

                     HorizontalAlignment="Right"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Rig Phone Number" Width="137.605" />

          <TextBox Grid.Row="6"

                   Grid.Column="1"

                   MaxLength="32"

                   Margin="9.999,6.067,0,6.067"

                   KeyboardNavigation.TabIndex="6"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.RigPhoneNumber, UpdateSourceTrigger=PropertyChanged}" />



        <TextBlock Grid.Row="7"

                     Margin="0,5"

                     HorizontalAlignment="Right"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Casing Size"/>

          <TextBox Grid.Row="7"

                   Grid.Column="1"

                   MaxLength="32"

                   Margin="9.999,6.067,0,6.067"

                   KeyboardNavigation.TabIndex="7"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.CasingSize, UpdateSourceTrigger=PropertyChanged}" />

        </Grid>

        <Grid VerticalAlignment="Top" Margin="0,20,60,0" d:LayoutOverrides="Width" Grid.Column="1">

          <Grid.ColumnDefinitions>

            <ColumnDefinition Width="0.3*" />

            <ColumnDefinition Width="0.7*" />

          </Grid.ColumnDefinitions>

          <Grid.RowDefinitions>

            <RowDefinition Height="*" />

            <RowDefinition Height="*" />

            <RowDefinition Height="*" />

            <RowDefinition Height="*" />

            <RowDefinition Height="*" />

            <RowDefinition Height="*" />

          </Grid.RowDefinitions>

         

         <TextBlock HorizontalAlignment="Right"

                     Margin="10,5,0,5"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Programmed By"  />

          <TextBox Grid.Row="0"

                   Grid.Column="1"

                   MaxLength="32"

                   Margin="10,5,0,5"

                   KeyboardNavigation.TabIndex="8"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.ProgrammedBy, UpdateSourceTrigger=PropertyChanged}" />

         

         

          <TextBlock Grid.Row="1"

                    FontSize="18"

                    Style="{StaticResource Univers57_TextBlock_Style}"

                     HorizontalAlignment="Right" Margin="10,10,0,5" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" />

                                    

          <TextBlock Grid.Row="2"

                     HorizontalAlignment="Right"

                     VerticalAlignment="Center"

                     FontSize="18"

                     Margin="10,5,0,5"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Sales Order No." />

          <TextBox Grid.Row="2"

                   Grid.Column="1"

                   MaxLength="32"

                   Margin="10,5,0,5"

                   KeyboardNavigation.TabIndex="9"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.SalesOrderNo, UpdateSourceTrigger=PropertyChanged}" />



        <TextBlock Grid.Row="3"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     HorizontalAlignment="Right" Margin="10,10,0,5" />



        <TextBlock Grid.Row="4"

                     HorizontalAlignment="Right"

                     VerticalAlignment="Center"

                     FontSize="18"

                     Margin="10,5,0,5"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Revision" />

          <TextBox Grid.Row="4"

                   Grid.Column="1"

                   MaxLength="32"

                   Margin="10,5,0,5"

                   KeyboardNavigation.TabIndex="10"

                   Style="{StaticResource Gray_TextBox_Style}"

                   Template="{StaticResource Base_TextBox_Template}"

                   Text="{Binding CurrentJob.Revision, UpdateSourceTrigger=PropertyChanged}" />



          <TextBlock Grid.Row="5"

                     FontSize="18"

                     Style="{StaticResource Univers57_TextBlock_Style}"

                     Text="Revision Date" HorizontalAlignment="Right" Margin="10,5,0,5" />

                                       

          <DatePicker Grid.Row="5"

                      Grid.Column="1"

                      Margin="10,5,0,5"

                      Focusable="True"

                      KeyboardNavigation.TabIndex="11"

                      KeyboardNavigation.TabNavigation="Continue"

                      Style="{StaticResource Base_DatePicker_Template}"

                      Text="{Binding CurrentJob.RevisionDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

                      HorizontalAlignment="Left"

                      />

       

        </Grid>
View Code

下层DataPicker的DT是

<Style x:Key="Base_DatePicker_Template" TargetType="{x:Type DatePicker}">

    <Setter Property="Foreground" Value="Gray"/>

    <Setter Property="IsTodayHighlighted" Value="True"/>

    <Setter Property="SelectedDateFormat" Value="Short"/>

    <Setter Property="Background" Value="Transparent"/>

    <Setter Property="Padding" Value="2"/>

    <Setter Property="BorderThickness" Value="1"/>

    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

    <Setter Property="Template">

      <Setter.Value>

        <ControlTemplate TargetType="{x:Type DatePicker}">

          <Grid>

            <Grid x:Name="PART_Root"

                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 

                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}">

              <Grid.ColumnDefinitions>

                <ColumnDefinition Width="*"/>

                <ColumnDefinition Width="Auto"/>

              </Grid.ColumnDefinitions>

              <DatePickerTextBox x:Name="PART_TextBox" Height="25" Width="175" Grid.Column="0"

                                 Focusable="{TemplateBinding Focusable}" 

                                 HorizontalContentAlignment="Stretch" Grid.Row="0"

                                 Style="{StaticResource Gray_TextBox_Style}"

                                 Template="{StaticResource Base_TextBox_Template}"

                                 Foreground="#666666" 

                                 VerticalContentAlignment="Center"

                                 Text="{TemplateBinding Text}" 

                                 Padding="3,5,33,5"/>

              <Button x:Name="PART_Button"

                      Width="18" Height="18" 

                      Cursor="Hand" 

                      Grid.Column="1" 

                      Foreground="{TemplateBinding Foreground}" 

                      Focusable="True" 

                      HorizontalAlignment="Right" 

                      Margin="5,0"

                      Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedDate, Converter={StaticResource DateToDayStringConverter}}"

                      Template="{StaticResource CalenderButton_ControlTemplate}" 

                      />

              <Grid x:Name="PART_DisabledVisual"

                    IsHitTestVisible="False" 

                    Opacity="0">

                <Popup x:Name="PART_Popup" 

                       AllowsTransparency="True" 

                       Placement="Bottom" 

                       PlacementTarget="{Binding ElementName=PART_TextBox}" 

                       StaysOpen="False"/>

              </Grid>

            </Grid>

          </Grid>

        </ControlTemplate>

      </Setter.Value>

    </Setter>

  </Style>
View Code

 

更多参考:

KeyBoardNavigationMode

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/af39c593-6a9f-4899-88b6-b28016de7d6f

Focus overview:

http://msdn.microsoft.com/en-us/library/aa969768.aspx#Keyboard_Navigation

Unable to focus the Calendar button on DatePicker of wpf toolkit

http://msdn.microsoft.com/en-us/library/system.windows.input.keyboardnavigationmode.aspx

你可能感兴趣的:(tab)