2017-06-21 71 views
1

私は5列のデータグリッドを持っています。カラム1、2及び3は、列4ユーザが入力することができTextColumnsであり、図5は、コンボボックスである:DataGrid ComboBoxをワンクリックで開く

<DataGrid x:Name="myTable" DataGridCell.Selected="grd_Cells_Selected" SelectionUnit="Cell" AutoGenerateColumns="False" ColumnWidth="*" Margin="5,0,0,0" Height="Auto" VerticalAlignment ="Center" HorizontalAlignment="Center" ItemsSource="{Binding mySourceCollection}"> 

    <DataGrid.Resources> 
     <DataTemplate x:Key="myTemplate1" DataType="vm:GridItem" > 
      <ComboBox SelectedValue="{Binding something, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding sometging}" DisplayMemberPath="desc"/> 
     </DataTemplate> 
     <DataTemplate x:Key="myTemplate2" DataType="vm:GridItem"> 
      <ComboBox x:Name="cboMY" SelectedValue="{Binding something, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="desc" ItemsSource="{Binding something}" IsSynchronizedWithCurrentItem="True"/> 
     </DataTemplate> 
    </DataGrid.Resources> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="H1" Binding="{Binding h1}" /> 
     <DataGridTextColumn Header="H2" Binding="{Binding h2}" /> 
     <DataGridTextColumn Header="H3" Binding="{Binding h3}" /> 
     <DataGridTemplateColumn Header="Combo1" CellTemplate="{StaticResource myTemplate1}" CellEditingTemplate="{StaticResource myTemplate1}" /> 
     <DataGridTemplateColumn Header="Combo2" CellTemplate="{StaticResource myTemplate2}" CellEditingTemplate="{StaticResource myTemplate2}" /> 
    </DataGrid.Columns> 

</DataGrid> 

私は

DataGridCell.Selected = "grd_Cells_Selected" を使用

次のCodeBehindを使用して、1回のクリックでセルを選択します。

private void grd_Cells_Selected(object sender, RoutedEventArgs e) { 
    if (e.OriginalSource.GetType() == typeof(DataGridCell)) { 
     // Starts the Edit on the row; 
     DataGrid grd = (DataGrid)sender; 
     grd.BeginEdit(e); 
    } 
} 

これはコンボボックスでは機能しません。私はComboBoxを開くために2回クリックする必要があります。ワンクリックでコンボボックスを開く方法はありますか?

答えて

0

DataGridViewコントロールの "EditMode"プロパティを "EditOnEnter"に変更します。これはすべての列に影響します。

+0

それを取得しないでください。 DataGridViewタグを使用せず、XAMLでEditModeを使用するオプションはありません –

0

回避方法が見つかりました。きれいではありませんが、それはこれまでの作品:

私は私がクリックされた現在の列を取得することにより、grd_Cells_Selectedを()拡張:

int col = PNTable.SelectedCells[0].Column.DisplayIndex; 

現在の列が1であれば、今私が唯一grd.BeginEdit(e)を言いますDataDridTerxtColumnsこれまで

全体のコード:

private void grd_Cells_Selected(object sender, RoutedEventArgs e) { 

    int col = PNTable.SelectedCells[0].Column.DisplayIndex; 
    if (col <= 2) { 
     if (e.OriginalSource.GetType() == typeof(DataGridCell)) { 
      // Starts the Edit on the row; 
      DataGrid grd = (DataGrid)sender; 
      grd.BeginEdit(e); 
     } 
    } 
} 

誰かが賢く解決策を持っている場合、私は幸せ

だろう
関連する問題