• 有关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

  • 相关阅读:
    Python修饰符实践
    回文
    Linux下安装Qt
    Linux下安装PyQT
    Python闭包实践
    杂乱
    windows下脚本转到linux下,文件保存格式要转换
    lua table.sort的bug
    shell截取某段
    coredump
  • 原文地址:https://www.cnblogs.com/shawnzxx/p/3132660.html
Copyright © 2020-2023  润新知