質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

1回答

5232閲覧

DataGridにおいて、特定の列のセルに対してタブフォーカスをさせないようにしたい

jonrock

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2021/06/21 05:08

WPFでアプリケーションを作成しています。

DataGrid 内のセルをTabキー、もしくはEnterキーにてセル間を移動した時に、
特定の列にはフォーカスを当てずに、次のセルにフォーカスがあたるような感じで、
フォーカス移動をスキップさせたいイメージです。

DataGridは、以下のような形となります。

MainWindow.xaml

<Window x:Class="WpfApp3.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp3" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <DataGrid Name="dataGrid" /> </Grid> </Window>

MainWindow.xaml.cs

public MainWindow() { InitializeComponent(); var data = new ObservableCollection<Person>( Enumerable.Range(1, 100).Select(i => new Person { Name = "田中 太郎" + i, Age = 20 + i % 50, AuthMember = i % 5 == 0 })); this.dataGrid.ItemsSource = data; } } public class Person { public string Name { get; set; } public int Age { get; set; } public bool AuthMember { get; set; } }

この時、一番右側にチェックボックスのセルが作成されるのですが、
Tabでセルを左から順に移動していった際、チェックボックスの列のセル全てにフォーカスが当たらず、
フォーカスが次の行に行くようにしたいです。

実現方法について、ご教授いただければ幸いです。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

DataGridにおいて、特定の列のセルに対してタブフォーカスをさせないようにしたい

その列がReadOnlyでよければズバリな回答がありました。
wpf - DataGrid tab navigation skip column - Stack Overflow

でもおそらくReadOnlyじゃなくても飛ばしたいのであろうかと思います。

DataGridCellとその中身(CheckBox)両方をIsTabStop="False"としたところ想定の動作となりました。

xml

1<Window 2 x:Class="Questions345202.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="800" 6 Height="450"> 7 <Grid> 8 <DataGrid Name="dataGrid" AutoGenerateColumns="False"> 9 <DataGrid.Resources> 10 <Style TargetType="DataGridCell"> 11 <Style.Triggers> 12 <Trigger Property="IsReadOnly" Value="True"> 13 <Setter Property="IsTabStop" Value="False" /> 14 </Trigger> 15 </Style.Triggers> 16 </Style> 17 </DataGrid.Resources> 18 <DataGrid.Columns> 19 <DataGridTextColumn Binding="{Binding Name}" Header="Name" /> 20 <DataGridTextColumn Binding="{Binding Age}" Header="Age" /> 21 22 <!-- ReadOnlyでいい場合 --> 23 <DataGridCheckBoxColumn 24 Binding="{Binding AuthMember}" 25 Header="AuthMember" 26 IsReadOnly="True" /> 27 28 <!-- 編集はしたい場合(Resourcesの記述は不要) --> 29 <DataGridTemplateColumn Header="AuthMember"> 30 <DataGridTemplateColumn.CellStyle> 31 <Style TargetType="{x:Type DataGridCell}"> 32 <Setter Property="IsTabStop" Value="False" /> 33 </Style> 34 </DataGridTemplateColumn.CellStyle> 35 <DataGridTemplateColumn.CellTemplate> 36 <DataTemplate> 37 <CheckBox 38 HorizontalAlignment="Center" 39 VerticalAlignment="Center" 40 IsChecked="{Binding AuthMember, UpdateSourceTrigger=PropertyChanged}" 41 IsTabStop="False" /> 42 </DataTemplate> 43 </DataGridTemplateColumn.CellTemplate> 44 </DataGridTemplateColumn> 45 </DataGrid.Columns> 46 </DataGrid> 47 </Grid> 48</Window>

投稿2021/06/21 10:11

編集2023/07/27 15:44
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問