3

チェックボックス列、ハイパーリンク列、テキスト列を備えた C# WPF Datagrid があります。私の DataGrid は DataTable にバインドされています。列は自動生成されませんが、列の数が事前にわからないため、コードで動的に作成します。セル内のテキストを選択できるようにしたいのですが (ctrl+c の目的で)、編集を無効にします。テキストを変更したくありません。誰でも助けることができますか?

4

3 に答える 3

7

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>
于 2011-04-29T10:12:30.583 に答える
2

ユーザーが通常一度にセル全体をコピーする場合は、DataGridSelectionUnitを Cell に設定できます。

セルのセクションをコピーする場合は、CellTemplate を上書きして、HCL が推奨するラベルを表示することをお勧めします。

于 2011-04-29T12:42:39.573 に答える
-2

DataGridTextBoxColumnのIsReadOnlyプロパティをtrueに設定しても、コンテンツを選択してコピーできると確信しています。

于 2011-04-29T10:14:17.083 に答える