Xceed Datagrid Cell Coloring - PullRequest
       26

Xceed Datagrid Cell Coloring

0 голосов
/ 05 января 2019

У меня есть xceed WPF Datagrid, который я хочу раскрасить определенную ячейку в каждой строке определенным образом.

Сетка привязана к объектам Collection of Bid. Столбец, который я хочу применить к цвету, называется BidValue.

    <xcdg:DataGridCollectionViewSource x:Key="BidViewSource" Source="{Binding Bids}" 
                                       d:DesignSource="{d:DesignInstance {x:Type models:Bid}, CreateList=True}">...

       <xcdg:DataGridControl Name="BidGrid" DockPanel.Dock="Bottom" VerticalAlignment="Top"  AutoCreateColumns="False" 
                              ReadOnly="True" ItemsSource="{Binding Source={StaticResource BidViewSource}}"...

Для упрощения процесса существуют Bid.BackgroundColor и Bid.ForegroundColor с целью предоставления геттеров, определяющих правильный цвет, в котором должно отображаться BidValue.

В основном то, что я пытаюсь сделать, должно начинаться примерно так:

                <xcdg:Column FieldName="BidValue" Title="Bid" CellHorizontalContentAlignment="Center" MaxWidth="75" AllowSort="False">
                    <xcdg:Column.CellContentTemplate>
                        <DataTemplate>
                            <DataTemplate.Triggers>

Оставшаяся часть, которая связывает его с моими полями цвета в объекте Bid, оказывается трудной. Я попытался реализовать логику раскраски в XAML (что более распространено) примерно так:

                          <DataTemplate.Triggers>
                                <DataTrigger Binding="{Binding Path=BidValue}" Value="X" >
                                    <Setter Property="Background" Value="Red"/>
                                    <Setter Property="Foreground" Value="White"/>
                                </DataTrigger>

но когда я это получаю, я получаю следующее:

ошибка MC4109: не удается найти свойство шаблона «Фон» для типа «System.Windows.Controls.ContentPresenter

1 Ответ

0 голосов
/ 18 января 2019

Этот код фактически получает данные из одного столбца (BidText), чтобы использовать набор цветов другого столбца (BidValue), что является его собственным средним умением с использованием xceed DataGrids.

Как упоминалось выше, элемент управления (в данном случае текстовое поле) должен быть установлен в шаблоне столбца и привязан к данным, которые уже отображались. XAML для ссылки на содержимое другого столбца xceed Datagrid для передачи в ColorConverter отображается в назначениях свойств Background и Foreground. Этот ссылочный столбец не должен быть видимым, как здесь, со свойством Visibility, установленным в False.

                <xcdg:Column FieldName="BidText" Visible="False" AllowSort="False"/>
                <xcdg:Column FieldName="BidValue" Title="Bid" CellHorizontalContentAlignment="Center" MaxWidth="50" AllowSort="False">
                    <xcdg:Column.CellContentTemplate>
                        <DataTemplate>
                            <TextBlock Name="TextBlock" Width="50"  HorizontalAlignment="Stretch" VerticalAlignment="Top" TextAlignment="Center" 
                                       Text="{Binding}" FontWeight="Bold"
                                       Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type xcdg:Cell}}, Path=ParentRow.DataContext.BidText, Converter={StaticResource FGColorConverter}}"
                                       Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type xcdg:Cell}}, Path=ParentRow.DataContext.BidText, Converter={StaticResource BGColorConverter}}"/>
                        </DataTemplate>
                    </xcdg:Column.CellContentTemplate>
                </xcdg:Column>
...