我有一个xceed WPF Datagrid,我想以特定方式为每一行中的特定单元格着色。
网格绑定到“出价”对象集合。我要应用于颜色的列是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”类型上找不到模板属性“ Background”
答案 0 :(得分:-1)
这段代码实际上是从一列(BidText)获取数据,然后使用它来设置另一列(BidValue)的颜色-这是使用xceed DataGrids本身的专长。
如上所述,必须在列的模板中设置一个控件(在这种情况下为文本块)并将其绑定到已经显示的数据。在Background和Foreground属性分配中显示了用于引用另一个xceed Datagrid列的内容以传递到ColorConverter的XAML。该引用列不需要像此处那样可见,将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>