2013-04-20 3 views
0

У меня есть DataGrid WPF, показывающий DataGridTextColumn с числами. Если значение отрицательное, я хотел бы отобразить его красным цветом.<Style> не может найти статический ресурс для DataGridTextColumn

Мой код компилируется, но я получаю ошибку во время выполнения:

"Cannot find resource named 'PlusBlackMinusRedConverter'. Resource names are case sensitive."

Я уверен, что преобразователь находится в Window.Resources, но я думаю, что когда DataGrid строит Datacell, он не может найти окно .Ресурсы. Просто догадка.

Кто-нибудь знает, что является реальной причиной и как заставить его работать?

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

У вас есть один ненужный пробел после имени ресурса.

Изменить его на следующий код:

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

Спасибо за решение. Я все испробовал, но другие глаза часто могут легко заметить простые ошибки. –