我有一个使用mvvm light工具包的DXgrid,它显示来自web服务的对象列表。
对象的一个属性是Color字段。我希望能够为一个颜色的细胞着色。
我试过在单元格内画一个矩形,但没有运气
<dxg:GridControl Grid.Row="1" AutoPopulateColumns="True" Height="412" Name="grdLicence" VerticalAlignment="Bottom"
ItemsSource="{Binding Model.Cars}"
DesignTimeDataObjectType="{Binding Model.Cars}" Grid.RowSpan="2">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="{Binding Path=Id}" DisplayMemberBinding="{Binding Path=Id}" Header="ID"/>
<dxg:GridColumn FieldName="{Binding Path=LicenseDate, StringFormat=\{0:dd/MM/yyyy\}}" DisplayMemberBinding="{Binding Path=LicenseDate, StringFormat=\{0:dd/MM/yyyy\}}" Header="Type" >
<dxg:GridColumn.DisplayTemplate>
<ControlTemplate>
<Rectangle Height="20" Width="30">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Path=Colour}"></SolidColorBrush>
</Rectangle.Fill>
</Rectangle>
</ControlTemplate>
</dxg:GridColumn.DisplayTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="{Binding Path=Province}" DisplayMemberBinding="{Binding Path=Province}" Header="Province" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView Name="tableView1" AutoWidth="True" ShowSearchPanelMode="Always" SelectedRowsSource="{Binding Selection}" MultiSelectMode="Row" NavigationStyle="Row" FocusedRow="{Binding SelectedItem, Mode=TwoWay}" />
</dxg:GridControl.View>
</dxg:GridControl>
如果我对其工作的颜色进行硬编码,而不是通过绑定。属性名称是正确的 谢谢!
好的进一步,我正在使用cellpropperty,并使用转换器,但由于一些奇怪的原因转换器不会触发。我有一个断点,但它永远不会命中
<UserControl.Resources>
<views:ColourConverter x:Key="clrc"/>
<Style x:Key="CellStyle" TargetType="{x:Type dxg:CellContentPresenter}">
<Setter Property="Background" Value="{Binding Path=DataContext.Colour, Converter={StaticResource clrc}}" />
</Style>
</UserControl.Resources>
// note颜色是字段名称。
答案 0 :(得分:0)
如果将Color属性绑定到字符串属性,它将无法工作。该程序不知道如何转换它,所以你必须告诉他IValueConverter:
public class StringToColorConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
System.Drawing.Color color = System.Drawing.Color.FromName(value.ToString());
if (color != null)
return new SolidColorBrush(System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B));
return new SolidColorBrush(System.Windows.Media.Colors.Transparent);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString();
}
}
如果它仍然无效,请在Convert-method中放置一个断点,看看是否输入。