wpf 应用程序中的布尔值到颜色转换器

Boolean to Color converter in wpf application

我有一个 wpf 应用程序,我想在其中将单选按钮的颜色转换为 (Green/Red) 与布尔值相比:

在Xaml文件中

   <UserControl.Resources>
            <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
            <local:BooleanToColorConverter  x:Key="ToColorConverter"/>
             </UserControl.Resources>

...........
     <DataGridCheckBoxColumn  Header="Statut" Binding="{Binding IsOnline, Mode=OneWay, UpdateSourceTrigger=LostFocus}" IsReadOnly="True"/>
     <DataGridTemplateColumn>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <RadioButton Foreground="{Binding IsOnline, Mode=OneWay, UpdateSourceTrigger=LostFocus, Converter={StaticResource ToColorConverter}}" IsChecked="True"  >  
                                    </RadioButton>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
     </DataGridTemplateColumn>

我添加了这个转换器:

 public class BooleanToColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            bool blnIsConnected = (bool)value;
            return (blnIsConnected == true) ? Brushes.Green : Brushes.Red;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
             return (value == Brushes.Green) ? true : false;
        }
    }

我得到的结果是:

我在所有情况下都得到了蓝色!!

  1. 我的代码有什么问题?
  2. 我该如何解决?

编辑

我试过这样编辑单选按钮模板

<DataGridCheckBoxColumn  Header="Statut" Binding="{Binding IsOnline, Mode=OneWay, UpdateSourceTrigger=LostFocus}" IsReadOnly="True"/>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <RadioButton  IsChecked="True"  >
                                    <Style TargetType="{x:Type RadioButton}">

                                        <Setter Property="Template">
                                            <Setter.Value>
                                                <ControlTemplate TargetType="{x:Type RadioButton}">
                                                    <BulletDecorator Background="Transparent">
                                                        <BulletDecorator.Bullet>
                                                            <Grid Width="13" Height="13">   
                                                                <Ellipse x:Name="CheckMark"  Margin="4" Visibility="Collapsed">
                                                                    <Ellipse.Fill>
                                                                        <SolidColorBrush Color="{Binding IsOnline,  UpdateSourceTrigger=LostFocus, Converter={StaticResource ToColorConverter}}" />
                                                                    </Ellipse.Fill>
                                                                </Ellipse>
                                                            </Grid>
                                                        </BulletDecorator.Bullet>
                                                   </BulletDecorator>
                                                    </ControlTemplate>
                                               </Setter.Value>
                                           </Setter> </Style>

                                </RadioButton>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>

                    </DataGridTemplateColumn>

我得到相同的结果

1) 您应该为 DataGridTemplateColumn 项的子项指定 DataContext。默认情况下,它采用父上下文(例如您的 ViewModel)。解决方案:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Grid DataContext="{Binding}">
                ...
            </Grid>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

2) 您只能使用我们的 RadioButton 绘制 BulletDecorator(最终解决方案是):

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate >
            <BulletDecorator DataContext="{Binding}">
                <BulletDecorator.Bullet>
                    <Ellipse x:Name="CheckMark"  Margin="4" Visibility="Visible" 
                        Width="10" Height="10" 
                        Fill="{Binding IsOnline, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ToColorConverter}}"></Ellipse>
                </BulletDecorator.Bullet>
            </BulletDecorator>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

结果:http://i.imgur.com/ddmVh2G.png