2013-04-20 41 views
0

我有一個WPF DataGrid,顯示帶數字的DataGridTextColumn。如果該值爲負值,我想以紅色顯示。<Style>找不到DataGridTextColumn的靜態資源

我的代碼編譯,但我得到一個運行時錯誤:

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

我相信轉換器處於Window.Resources,但我的猜測是,當DataGrid的構造DATACELL,它不能找到窗口的.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

你有資源名稱後的一個不必要的空間。

將其更改爲下面的代碼:

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

謝謝你的解決方案。我嘗試了一切,但其他的眼睛往往更容易發現這樣的簡單錯誤。 – 2013-04-26 02:05:41