2015-10-05 40 views
1

我试图保存记录,当组合键按下Ctrl + S. 下面的代码工作正常,只有当我退出TextBox并选择行然后按Ctrl + S. 如何SelectItem而不退出TextBox?例如:输入文本>> Ctrl + S >>继续输入。 这里是我的代码:如何在编辑时获取ListView SelectedItem?

 if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.S)) 
     { 
      sql.saveSoftwareChanges(_list.SelectedItem as Software); 
      e.Handled = true; 
     } 

和XAML:

  <ListView x:Name="_list" Visibility="Visible" KeyDown="_list_KeyDown"> 

      <!--RESOURCES--> 
      <ListView.Resources> 
       <Style TargetType="ListViewItem"> 
        <Style.Triggers> 
         <Trigger Property="IsKeyboardFocusWithin" Value="true"> 
          <Setter Property="IsSelected" Value="true" /> 
         </Trigger> 

         <Trigger Property="IsSelected" Value="true"> 
          <Setter Property="Background" Value="#FFFFFF9A" /> 
         </Trigger> 

        </Style.Triggers> 
       </Style> 
      </ListView.Resources> 
      <!--/RESOURCES--> 

      <ListView.View> 
       <GridView> 

        <GridViewColumn> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Button x:Name="_save" Content="Save" MinWidth="20" Width="AUTO" Click="_save_Click" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn Header="Product ID"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Text="{Binding productId}" MinWidth="20" Width="AUTO" Padding="2"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn Header="Product"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Text="{Binding product}" MinWidth="20" Width="AUTO" Padding="2"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn Header="Path"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Text="{Binding path}" MinWidth="20" Width="AUTO" Padding="2"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn Header="Master Path"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Text="{Binding master_path}" MinWidth="20" Width="AUTO" Padding="2"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn Header="Parameters"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Text="{Binding parameters}" MinWidth="20" Width="AUTO" Padding="2"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn Header="Windows Version"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Text="{Binding windowsVersion}" MinWidth="20" Width="AUTO" Padding="2"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

       </GridView> 
      </ListView.View> 
     </ListView> 
+0

你在哪儿打这个代码?它是在列表框按键事件?来自ListView的 – Emad

+0

,查看更新的代码 – arti

回答

1

了大量的研究和反复试验后,我已经得到了解决。 这是迁出该领域,这可以通过实现简单:

MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 

和整个方法是这样的:

 if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.S)) 
     { 
      var uie = e.OriginalSource as UIElement; 
      uie.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 
      sql.saveSoftwareChanges(_list.SelectedItem as Software); 

      uie.Focus(); 
      e.Handled = true; 
     } 

我希望这将帮助其他人。

0

你必须把你的代码保存在一个函数调用,然后从可能有当时的焦点任何控制这个功能。 (即文本框)。 请记住,键盘事件只有在相应的控件具有焦点时才会触发。

测试此:

<ListView x:Name="_list" Visibility="Visible" KeyDown="_list_KeyDown"> 

     <!--RESOURCES--> 
     <ListView.Resources> 
      <Style TargetType="ListViewItem"> 
       <Style.Triggers> 
        <Trigger Property="IsKeyboardFocusWithin" Value="true"> 
         <Setter Property="IsSelected" Value="true" /> 
        </Trigger> 

        <Trigger Property="IsSelected" Value="true"> 
         <Setter Property="Background" Value="#FFFFFF9A" /> 
        </Trigger> 

       </Style.Triggers> 
      </Style> 
     </ListView.Resources> 
     <!--/RESOURCES--> 

     <ListView.View> 
      <GridView> 

       <GridViewColumn> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <Button x:Name="_save" Content="Save" MinWidth="20" Width="AUTO" Click="_save_Click" /> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="Product ID"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding productId}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="Product"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding product}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="Path"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding path}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="Master Path"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding master_path}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="Parameters"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding parameters}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="Windows Version"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding windowsVersion}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

      </GridView> 
     </ListView.View> 
    </ListView> 
+0

nope,这没有帮助。 – arti

+0

请告诉我有关错误的信息。我认为文本框和列表框的KeyDown事件有不同的签名,所以你不能以这种方式使用它们。 – Emad

+0

没有错误。它只是不会保存,它会从msql中触发messagebox,所以部分工作正常,但它不会保存它,因为没有任何东西传递给此方法 – arti