WPF datagrid - включить выбор, отключить ввод текста - PullRequest
3 голосов
/ 29 апреля 2011

У меня есть C # WPF Datagrid со столбцом флажка, столбцами гиперссылки и текстовыми столбцами. Моя DataGrid связана с DataTable. Столбцы не генерируются автоматически, но я создаю их в коде динамически, поскольку количество столбцов заранее неизвестно. Я хотел бы разрешить выделение текста в ячейках (для целей ctrl + c), но при этом отключить редактирование. Я не хочу, чтобы текст был изменен. Кто-нибудь может помочь?

Ответы [ 3 ]

7 голосов
/ 29 апреля 2011

Возможно, возможно использовать DataGridTemplateColumn:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox IsReadOnly="True" Text="{Binding YourProperty,Mode=OneWay}"/>                            
        </DataTemplate>                        
    </DataGridTemplateColumn.CellTemplate>                    
</DataGridTemplateColumn>

. Это также работает с флажками, добавляет флажок, привязывает его IsChecked и использует в качестве содержимого TextBox, для которого установлено значение IsReadOnly.

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding YourBooleanValue}">
                <TextBox IsReadOnly="True" Text="YourCopyableTextOrABindingToText"/>
            </CheckBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Если вы хотите, чтобы флажок был доступен только для чтения, установите для его свойства Enabled значение false.Однако в этом случае вы должны объявить TextBox не как дочерний элемент, а как родственный элемент CheckBox (используйте сетку или StackPanel) для этого.

Если вы хотите сделать данные доступными только для чтения для всей DataGrid, используйте:

<DataGrid IsReadOnly="True">

Это также возможно для столбцов:

<DataGridTextColumn IsReadOnly="True">

Если вы хотите определить его для каждой строки, вы должны использовать DataGridTemplateColumn s и связать IsReadOnly-Объект редактирования редактирования.

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox IsReadOnly="{Binind YourReadOnlyProperty}" Text="{Binding YourProperty,Mode=OneWay}"/>
        </DataTemplate>                        
    </DataGridTemplateColumn.CellTemplate>                    
</DataGridTemplateColumn>
2 голосов
/ 29 апреля 2011

Если ваши пользователи обычно копируют сразу всю ячейку, вы можете установить для DataGrid SelectionUnit значение Ячейка

Если они копируют разделы ячейки, лучше переписать шаблон CellTemplate, чтобы отобразить метку в соответствии с рекомендацией HCL

0 голосов
/ 29 апреля 2011

Я вполне уверен, что если вы установите для свойства IsReadOnly объекта DataGridTextBoxColumn значение true, вы все равно сможете выбирать и копировать содержимое.

...