Событие редактирования столбца шаблона сетки данных WPF и цвет чередующегося столбца - PullRequest
0 голосов
/ 06 октября 2010

Я иногда использую WPF для тишины.Я знаю, что DataGrid в WPF не имеет коллекции Column в качестве свойства зависимости, поэтому столбцы нельзя добавлять динамически.

Разрабатываемое мной приложение очень динамично, поэтому число столбцов неизвестно.Поэтому я создаю столбцы DataGridTemplate из кода позади.

Проблема 1 : я хочу, чтобы чередующиеся столбцы имели другой цвет фона.Как мне сделать это программно ??(DataGridTemplateColumn не имеет свойства Background, поэтому я не могу найти решение)

Проблема 2 : мой DataGridTemplateColumn имеет DataTemplate, в котором у меня есть StackPanel с 2 TextBox в нем.В DataGrid есть событие CellEditing Event, которое срабатывает, когда мы редактируем ячейку.Это работает для столбца по умолчанию, но для моего столбца, если я редактирую эти TextBoxes, событие не будет запущено !!!Так как мне этого добиться ??

(я иногда поражаюсь WPF !!!)

1 Ответ

2 голосов
/ 07 октября 2010

Проблема Ноль Вы можете иметь столбцы в таблице данных, сгенерированные для вас, если вы используете AutoGenerateColumns="true" при настройке своей таблицы данных.Позже он не будет динамически добавлять столбцы, но может, если вы сбросите источник данных?(не является положительным)

Проблема первая DataGrid имеет свойства AlternatingRowBackground и AlternationCount для настройки чередующихся рядов фонов.Но я не вижу ничего для чередующихся фонов столбцов в самой сетке.Вы можете сделать это внутри вашей таблицы данных, хотя:

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Background="Red" Foreground="White">I'm Red</TextBlock>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

Но я все еще вижу поле внутри, даже с margin = 0, поэтому ячейки выглядят забавно, если вы используете какие-то действительно очевидные цвета.

Задача вторая Вы имеете в виду событие CellEndEditing?Потому что я не вижу никаких других событий редактирования ячейки.Я попробовал следующее:

    <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" CellEditEnding="DataGrid_CellEditEnding">
        <DataGrid.Columns>
            <DataGridTextColumn Header="A" Binding="{Binding Field0}" />
            <DataGridTemplateColumn Header="BC">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Field1}"/>
                            <TextBlock Text="{Binding Field2}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBox Text="{Binding Field1}"/>
                            <TextBox Text="{Binding Field2}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

И мой обработчик событий DataGrid_CellEditEnding вызывается всякий раз, когда любое из текстовых полей в CellEditingTemplate теряет фокус, независимо от того, изменились данные или нет, поэтому кажется, что у меня все работает.

Используете ли вы какой-либо другой DataGrid, кроме "встроенного" WPF?

...