使用样式属性更改网格控件中复选标记的颜色

时间:2015-04-18 15:55:07

标签: c# wpf xaml mvvm devexpress

我有一个使用MVVM设计模式的WPF应用程序。其中一个用户控件的网格控件绑定到视图模型中的数据表。网格控件的一列是bool类型。因此,Grid控件将它们显示为一个复选框列,为用户提供检查/取消选中该框的功能。现在我想要实现的是基于特定条件的网格控件的不同行的不同颜色。为此,我在我的UserControl的资源字典中定义了一个静态资源 - Style。代码如下:

<UserControl.Resources>
   <ResourceDictionary>
      <Style x:Key="ForeroundStyle" TargetType="{x:Type dxg:GridRowContent}">
         <Setter Property="Foreground">
            <Setter.Value>
               <MultiBinding Converter ="{StaticResource MyConverter}" ConverterParameter="1">
                  <MultiBinding.Bindings>
                     <Binding Path="DataContext"/>
                     <Binding Path="Row"/>
                  </MultiBinding.Bindings>
               </MultiBinding>
            </Setter.Value>
         </Setter>
      </Style>
   </ResourceDictionary>
</UserControl.Resources>

我的问题是网格控件的所有其他列元素都通过转换器获得指定的颜色,但复选框中的复选标记具有默认颜色值,该值不会更改。如何在复选框中选中复选标记。任何建议都会有所帮助!

1 个答案:

答案 0 :(得分:0)

要更改CheckBox中复选标记的颜色,您可以按照以下三个步骤操作。

首先通过以这种方式添加新的依赖属性来扩展CheckBox控件:

public class ExCheckBox : CheckBox
{
    public static readonly DependencyProperty CheckMarkColorProperty =
        DependencyProperty.Register("CheckMarkColor", typeof(Brush), typeof(ExCheckBox), new UIPropertyMetadata(Brushes.Black));

    public Brush CheckMarkColor
    {
        get
        {
            return (Brush)GetValue(CheckMarkColorProperty);
        }
        set
        {
            SetValue(CheckMarkColorProperty, value);
        }
    }
}

第二步:您可以使用CheckBox样式。您可以找到示例here。现在您只需将CheckMarkColorProperty绑定到“CheckMark”即可。在示例中,您需要以这种方式修改Path对象:

<Path Width="7" Height="7" 
    x:Name="CheckMark"
    SnapsToDevicePixels="False" 
    Stroke="{TemplateBinding CheckMarkColor}"
    StrokeThickness="2"
    Data="M 0 0 L 7 7 M 0 7 L 7 0" />

当然,样式必须与ExCheckBox控件“链接”。

最后一步:您可以在网格中绑定ExCheckBox,以根据您的逻辑更改其复选标记颜色。