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

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

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

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

WPF

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

Q&A

解決済

2回答

4991閲覧

【C#】【WPF】DataGridのDataGridTextColumnをエクスプローラーのように制御をしたい

OXamarin

総合スコア59

C#

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

WPF

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

0グッド

0クリップ

投稿2019/08/09 16:36

##前提
環境:VS2019
言語:C# WPF
フレームワーク:MVVM

##悩んでいる事
以下のようなカラムの設定を、DataGridにしています。

xaml

1<DataGrid.Columns> 2 <DataGridTemplateColumn CanUserResize="False"> 3 <DataGridTemplateColumn.CellTemplate> 4 <DataTemplate> 5 <Image Width="12" Source="{Binding ImageSource}" HorizontalAlignment="Center" VerticalAlignment="Center" /> 6 </DataTemplate> 7 </DataGridTemplateColumn.CellTemplate> 8 </DataGridTemplateColumn> 9 <materialDesign:MaterialDataGridTextColumn Header="ファイル名" Binding="{Binding FileName}" Width="200" SortMemberPath="FileName" 10 EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"> 11 <DataGridTextColumn.ElementStyle> 12 <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}"> 13 <Setter Property="TextTrimming" Value="CharacterEllipsis"/> 14 <Setter Property="Margin" Value="0,0,10,0" /> 15 </Style> 16 </DataGridTextColumn.ElementStyle> 17 </materialDesign:MaterialDataGridTextColumn> 18 <DataGridTemplateColumn Header="フルパス" Width="*" SortMemberPath="FullPath"> 19 <DataGridTemplateColumn.CellTemplate> 20 <DataTemplate> 21 <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{Binding FullPath}" TextTrimming="CharacterEllipsis" /> 22 </DataTemplate> 23 </DataGridTemplateColumn.CellTemplate> 24 </DataGridTemplateColumn> 25 <DataGridTemplateColumn Header="更新日時" Width="120" SortMemberPath="LastWriteTime" SortDirection="Descending"> 26 <DataGridTemplateColumn.CellTemplate> 27 <DataTemplate> 28 <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 29 Text="{Binding LastWriteTime, StringFormat={}{0:yyyy/MM/dd/ HH:mm:ss}}" TextTrimming="CharacterEllipsis" /> 30 </DataTemplate> 31 </DataGridTemplateColumn.CellTemplate> 32 </DataGridTemplateColumn> 33</DataGrid.Columns>

動きとしては以下の通りです。
イメージ説明

現状、
①行選択をした状態でファイル名のセルをもう一度クリックする
②行選択されていない状態でファイル名のセルをダブルクリックする
上記のどちらかの場合に、ファイル名が編集可能になってしまいます。
非常に分かり辛いと思いますが、ファイル名のセルに青い線が表示されると、編集可能状態になっています。

これを、エクスプローラーのように、
行選択をした状態でファイル名をもう一度クリックした場合にのみ、ファイル名を編集するようにしたいです。
イメージ説明

つまり、
②行選択されていない状態でファイル名のセルをダブルクリックする
この場合にはファイル名の編集をさせないようにしたいのですが、可能でしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

DataGridには編集状態に入った時に発生するイベントがあり、ここでキャンセルフラグを立てることで、編集状態に入らないように制御することが可能です。

非常に近い質問があるので、こちらを参考にしてください。
WPF DataGrid セルの編集方法について
リンク先の質問ではこの質問とは逆の制御をしていますが、応用して実現可能だと思います。

投稿2019/08/11 02:44

Gurz1019_MP

総合スコア196

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

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

0

ダブルクリック時に発火するコマンドに一番最初にDataGridをReadOnly = True にして、
一番最後にReadOnly = false にすればできました。

投稿2019/08/09 23:22

OXamarin

総合スコア59

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問