自定义绘制Checkbox时,如何将“椭圆形状”的“填充”颜色绑定到CheckBox的前景?

时间:2019-07-29 13:27:46

标签: wpf checkbox binding property-binding

我正在尝试制作一个看起来有点像LED指示灯的CheckBox:选中时颜色鲜艳,未选中时灰色。在我的应用中,我需要具有不同LED颜色的这种状态灯。有人告诉我“ WPF方式”是找到几乎完全像您想要的控件一样工作的控件,然后对其进行自定义,这就是我正在尝试的方法。

我找到了ColorToSolidColorBrushValueConverter的代码,它将使我可以将CheckBox的前景色转换为在填充LED时要使用的Brush。

老实说,我现在唯一需要做的就是完成Ellipse的Fill属性上的绑定路径,但是我无法确定正确的绑定字符串。我已经尝试过诸如Path = Foreground,Path = Target.Foreground,Path = TargetSource.Foreground,Path = Source.Foreground,Path = Parent.Foreground之类的东西,但是没有任何方法能够使椭圆显示出填充颜色。

在我的代码中,我注释掉了一个触发器,该触发器设置为在未选中该框时可以更改颜色,因此我可以确定该触发器不会表现异常,并阻止了我看到颜色。为了简洁起见,我为了简洁起见删除了注释掉的代码,因此正如图所示的这种样式目前只能显示“已选中”状态。

          <converters:ColorToSolidColorBrushValueConverter x:Key="ColorToBrush" />

          <Style x:Key="StyleDotCheckBox" TargetType="{x:Type CheckBox}">
            <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="{x:Type CheckBox}">
                  <StackPanel Orientation="Horizontal">
                    <Ellipse x:Name="ColorDot"
                             HorizontalAlignment="Center"
                             Stretch="UniformToFill"
                             StrokeLineJoin="Round"
                             Stroke="Black"
                             Fill="{Binding Path=Foreground, Converter={StaticResource ColorToBrush}}"
                             Margin="1"
                             />
                  </StackPanel>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Style>

我希望名为ColorDot的Ellipse有时会填充一些颜色,但是它始终是空白的,因为我尚未确定“填充绑定”的正确路径。

1 个答案:

答案 0 :(得分:0)

Fill="{TemplateBinding Background}"

正是您所需要的,因为您是在ControlTemplate中进行设置的。

由于Background已经是Brush对象,因此不需要转换器。