我有一个WPF DataGrid显示带有数字的DataGridTextColumn。如果值为负,我想以红色显示。
我的代码编译,但是我遇到了运行时错误:
“找不到名为'PlusBlackMinusRedConverter'的资源。资源 名称区分大小写。“
我确定转换器在Window.Resources中,但我的猜测是,当DataGrid构造DataCell时,它找不到Window.Resources。只是一个猜测。
有谁知道真正的原因是什么以及如何使其发挥作用?
XAML:
<Window x:Class="MyNameSpace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:MyNameSpace="clr-namespace:MyNameSpace">
<Window.Resources>
<MyNameSpace:TextDoubleToPlusBlackMinusRedConverter x:Key="PlusBlackMinusRedConverter " />
</Window.Resources>
<DockPanel>
<DataGrid Name="stocksDataGrid"
IsReadOnly="True"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Trend, StringFormat=P}"
Header="Trend">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.Foreground"
Value="{Binding Path=Text, Converter={StaticResource PlusBlackMinusRedConverter }}" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
</Window>
代码:
using System;
using System.Globalization;
using System.Windows.Data;
namespace MyNameSpace {
public class TextDoubleToPlusBlackMinusRedConverter: IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value is string){
double valueDouble;
if (double.TryParse((string)value, out valueDouble)){
if (valueDouble<0){
return "Red";
} else {
return "Black";
}
}
}
return "Gray";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
}
答案 0 :(得分:1)
资源名称后面有一个不必要的空格。
将其更改为以下代码:
<MyNameSpace:TextDoubleToPlusBlackMinusRedConverter x:Key="PlusBlackMinusRedConverter"/>