かなりの数の列があるデータグリッドがあります。通常、ユーザーはTabキーを押して、DataGridセル内のコントロールを切り替えることができます。データグリッドセルはIsTabStop = falseに設定されているため、セル自体へのフォーカスはスキップされ、実際のコントロールにフォーカスが移るまでそのまま通過します。
ユーザーがEnterキーを押した場合、同じ列内で作業する必要があるため、これは機能しないようです。 DataGridはCOLUMNの次のセルにフォーカスを渡しますが、IsTabStop設定も無視するため、内部のコントロールではなくセル自体にフォーカスを与えるだけです。
これを修正する方法のアイデア。
短い例
<DataGrid AutoGenerateColumns="False" Name="grid1" >
<DataGrid.Resources>
<Style TargetType="{x:Type Border}" x:Key="coloredBorder">
<Setter Property="Background" Value="Yellow"/>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="IsTabStop" Value="False"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding A, Mode=OneWay}" Header="A"/>
<DataGridTemplateColumn Header="B">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border BorderBrush="Black" BorderThickness="0,0,1,0" Width="20" Height="20" Style="{DynamicResource coloredBorder}"/>
<ComboBox Grid.Column="1" SelectedItem="{Binding A, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding MenuItems, ElementName=window}"></ComboBox>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
また、このためにサンプルのWPFアプリを追加しましたここに。再現するには、コンボボックスのいずれかをクリックして、フォーカスを与えます。 Presタブを押すと、次のコンボボックスが通常どおりフォーカスされていることがわかります。複数のコンボボックス列を追加すると、右側のコンボボックスにフォーカスが移動します。
ただし、Enterキーを押すと、フォーカスは下のセルに移動しますが、セルをスキップしてセルの内容に移動することはありません。代わりに、セルが強調表示されます。 そのようです:
関連した質問
- WPF ListViewの水平スクロールバーは、垂直スクロールが行われない限り表示されません。
- 機能がボタンによってトリガーされた場合、WPFバインディングは機能しません
- RadioButtons/Checkboxを2列に分割します
- 数字のみのC#テキストボックス
- C#DateTime + TimeSpan =追加の12時間?
- NETSDK1135サポートされているOSPlatformVersion100190410をTargetPlatformVersion70より高くすることはできません
- WPF MVVMでカスタムタイプのデフォルト値を復元するにはどうすればよいですか?
- WPFアプリクラスから変数にアクセスするための推奨される方法
- LiveChartsを使用してLineSeriesの値プロパティをバインドする方法
- アラビア語形式のWPFですべての曜日の週の名前を取得するにはどうすればよいですか?
MSDNで得た返信に基づいて:
添付プロパティを作成することでこれを解決しました:
奇妙なことは、これが行っている唯一のことは、ユーザーがEnterキーを押したときにフォーカスをDOWNに渡すようWPFに伝えることです。