Telerik 数据列前景颜色转换器不工作
Telerik Data Column Foreground Color Converter Not Working
我在更改 Telerik DataGrid 列中文本框的文本颜色时遇到问题。
XAML:
<telerik:RadGridView x:Name="RobotsGrid" AutoGenerateColumns="False" CanUserFreezeColumns="False" ItemsSource="{Binding Robots}" ShowGroupPanel="False" ShowInsertRow="False" RowIndicatorVisibility="Collapsed" CanUserDeleteRows="False" telerik:StyleManager.Theme="Office_Blue" SelectionMode="Extended" CellEditEnded="RobotsGrid_CellEditEnded" EnableColumnVirtualization="False" Filtered="WorkItemsGrid_Filtered" SelectionChanged="RobotsGrid_SelectionChanged" EnableRowVirtualization="True" IsBusy="{Binding Path=RobotsRefreshing, Mode=OneWay}">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Width="200" Header="Status" IsReadOnly="True">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Status}" Foreground="{Binding Path=Success, Converter={StaticResource BoolToColorConverter} }" IsReadOnly="True" IsTabStop="False" PreviewKeyDown="SelectKeyDown" PreviewMouseDown="SelectParentRow" TextWrapping="Wrap" Tag="{Binding}" BorderThickness="0" Margin="5,0"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:RadGridView.Columns>
</telerik:RadGridView>
网格绑定了一个ObservableCollection<Robots>
,每个机器人都有一个string Status
和bool Success
。我已经绑定了工作正常的 Texbox 的 Text
属性,但是前景设置不正确。 Robot
实现 INotify属性 改变了,在 setter 我调用 OnPropertyChanged()
。
我已经对 Foreground
进行了硬编码并按预期工作,看起来好像转换器没有按预期工作。
这是转换器:
public class BoolToColorConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (value != null) {
var success = System.Convert.ToBoolean(value);
if (success)
return Brushes.Green;
else
return Brushes.Red;
}
return Brushes.Blue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return Brushes.Black;
}
}
我没有收到任何错误,我已经逐步完成代码并且转换器被命中,它 returns Brushes.Green
正如预期的那样,但我仍然没有看到前景实际上改变。我已经尝试将转换器用于 return 一个字符串并将其用于 Text
属性 - 它按预期工作。
我是否漏掉了一些显而易见的东西?
编辑:转换器被击中后,我在输出中得到这个 window :
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=Success; DataItem='RobotManagerLite' (HashCode=21433709); target element is 'TextBox' (Name=''); target property is 'Foreground' (type 'Brush')
这是一个愚蠢的问题 - 只是使用 System.Windows.Media.Brushes 而不是 System.Drawing.Brushes 的问题。 FML
我在更改 Telerik DataGrid 列中文本框的文本颜色时遇到问题。
XAML:
<telerik:RadGridView x:Name="RobotsGrid" AutoGenerateColumns="False" CanUserFreezeColumns="False" ItemsSource="{Binding Robots}" ShowGroupPanel="False" ShowInsertRow="False" RowIndicatorVisibility="Collapsed" CanUserDeleteRows="False" telerik:StyleManager.Theme="Office_Blue" SelectionMode="Extended" CellEditEnded="RobotsGrid_CellEditEnded" EnableColumnVirtualization="False" Filtered="WorkItemsGrid_Filtered" SelectionChanged="RobotsGrid_SelectionChanged" EnableRowVirtualization="True" IsBusy="{Binding Path=RobotsRefreshing, Mode=OneWay}">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Width="200" Header="Status" IsReadOnly="True">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Status}" Foreground="{Binding Path=Success, Converter={StaticResource BoolToColorConverter} }" IsReadOnly="True" IsTabStop="False" PreviewKeyDown="SelectKeyDown" PreviewMouseDown="SelectParentRow" TextWrapping="Wrap" Tag="{Binding}" BorderThickness="0" Margin="5,0"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:RadGridView.Columns>
</telerik:RadGridView>
网格绑定了一个ObservableCollection<Robots>
,每个机器人都有一个string Status
和bool Success
。我已经绑定了工作正常的 Texbox 的 Text
属性,但是前景设置不正确。 Robot
实现 INotify属性 改变了,在 setter 我调用 OnPropertyChanged()
。
我已经对 Foreground
进行了硬编码并按预期工作,看起来好像转换器没有按预期工作。
这是转换器:
public class BoolToColorConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (value != null) {
var success = System.Convert.ToBoolean(value);
if (success)
return Brushes.Green;
else
return Brushes.Red;
}
return Brushes.Blue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return Brushes.Black;
}
}
我没有收到任何错误,我已经逐步完成代码并且转换器被命中,它 returns Brushes.Green
正如预期的那样,但我仍然没有看到前景实际上改变。我已经尝试将转换器用于 return 一个字符串并将其用于 Text
属性 - 它按预期工作。
我是否漏掉了一些显而易见的东西?
编辑:转换器被击中后,我在输出中得到这个 window :
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=Success; DataItem='RobotManagerLite' (HashCode=21433709); target element is 'TextBox' (Name=''); target property is 'Foreground' (type 'Brush')
这是一个愚蠢的问题 - 只是使用 System.Windows.Media.Brushes 而不是 System.Drawing.Brushes 的问题。 FML