时间:2013-04-20 13:51:13

标签: wpf xaml wpfdatagrid

我有一个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();
    }
  }
}

1 个答案:

答案 0 :(得分:1)

资源名称后面有一个不必要的空格。

将其更改为以下代码:

<MyNameSpace:TextDoubleToPlusBlackMinusRedConverter x:Key="PlusBlackMinusRedConverter"/>