Я пытаюсь сделать CheckBox, который выглядел бы как маленький светодиодный индикатор: ярко окрашен, когда установлен, серый, когда он не установлен. В моем приложении мне нужны такие индикаторы состояния с разными цветами светодиодов. Мне сказали, что «путь WPF» - найти элемент управления, который работает почти так же, как вы хотите, а затем настроить его, вот что я и пытаюсь.
Я нашел код для ColorToSolidColorBrushValueConverter, который позволит мне преобразовать цвет переднего плана CheckBox в кисть, которая будет использоваться при заливке светодиода.
Я честно думаю, что единственное, что мне нужно сделать сейчас, - это завершить привязку Path в свойстве Ellipse Fill, но я не смог определить правильную строку привязки. Я пробовал такие вещи, как Path = Foreground, Path = Target.Foreground, Path = TargetSource.Foreground, Path = Source.Foreground, Path = Parent.Foreground, но ничто не заставляет Ellipse показывать цвет заливки.
В моем коде я закомментировал триггер, настроенный для изменения цвета, когда флажок снят, поэтому я мог быть уверен, что триггер не ведет себя неожиданно и не мешает мне видеть цвет. Я удалил закомментированный код для краткости в этом посте, поэтому этот стиль, как показано, в настоящее время может отображать только состояние «отмечен».
<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 в какой-то момент будет заполнен каким-то цветом, но он всегда пустой, я думаю, потому что я не определил правильный путь для привязки заливки.