チェックボックス列、ハイパーリンク列、テキスト列を備えた C# WPF Datagrid があります。私の DataGrid は DataTable にバインドされています。列は自動生成されませんが、列の数が事前にわからないため、コードで動的に作成します。セル内のテキストを選択できるようにしたいのですが (ctrl+c の目的で)、編集を無効にします。テキストを変更したくありません。誰でも助けることができますか?
3 に答える
1つの可能性は、おそらくDataGridTemplateColumnを使用することです。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox IsReadOnly="True" Text="{Binding YourProperty,Mode=OneWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
これはチェックボックスでも機能し、チェックボックスを追加し、そのIsCheckedをバインドして、IsReadOnlyに設定されたTextBoxをコンテンツとして使用します。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding YourBooleanValue}">
<TextBox IsReadOnly="True" Text="YourCopyableTextOrABindingToText"/>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
チェックボックスを読み取り専用にする場合は、そのEnabled-propertyをfalseに設定します。ただし、この場合、TextBoxを子としてではなく、CheckBoxの兄弟として宣言する必要があります(グリッドまたはStackPanelを使用)。
DataGrid全体のデータを読み取り専用にする場合は、次を使用します。
<DataGrid IsReadOnly="True">
これは、列でも可能です。
<DataGridTextColumn IsReadOnly="True">
行ごとに定義する場合は、DataGridTemplateColumnsを使用して、編集コントロールのIsReadOnlyプロパティをバインドする必要があります。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox IsReadOnly="{Binind YourReadOnlyProperty}" Text="{Binding YourProperty,Mode=OneWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
ユーザーが通常一度にセル全体をコピーする場合は、DataGridSelectionUnitを Cell に設定できます。
セルのセクションをコピーする場合は、CellTemplate を上書きして、HCL が推奨するラベルを表示することをお勧めします。
DataGridTextBoxColumnのIsReadOnlyプロパティをtrueに設定しても、コンテンツを選択してコピーできると確信しています。