WPF使用IValueConverter并在app.xaml中引用类

时间:2014-04-30 08:28:43

标签: c# wpf xaml datagrid

我有一个包含数据网格的WPF应用。我正在尝试使用自定义值转换器来确定单元格的字体颜色。

我在下面创建了这个类。

namespace MyNameSpace
{    
    public class AboveMeanToBoolConverter : IValueConverter
    {
         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
            double dValue = System.Convert.ToDouble(value);
            double dParameter = System.Convert.ToDouble(parameter);

            return (dValue > dParameter);  
         }

         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
            return null;
         }
}

在我的MainWindow xaml中,我有以下

<Window.Resources>
    <local:AboveMeanToBoolConverter x:Key="meanToBool"/>
</Window.Resources>

第一期:

输入local后:intellisense显示我的类AboveMeanToBoolConverter。但是该行突出显示“名称AboveMeanToBoolConverter在名称空间clr-namespace中不存在:MyNameSpace”

第二期

我在app.xaml中拥有app和datagrid的所有样式。

下面是我的app.xaml中我正在设置DataGridRow的部分中的xaml片段。绑定行突出显示并告诉我“资源”meanToBool“无法解析”。那么如何在app.xaml中引用我的转换器?此外,我的二传手指的是一个边框(复制和粘贴来自正在工作的东西 - 如何更改这个以便字体改变颜色而不是单元格的背景?

 <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding MeanPost, Converter={StaticResource meanToBool}, ConverterParameter=0}" Value="0">
                            <Setter TargetName="DGR_Border" Property="Background" Value="{StaticResource brushRowSend}"/>
                        </DataTrigger>
                    </ControlTemplate.Triggers>

更新

回答以下评论。下面是我在本地定义的地方。

在我的MainWindow.xaml

<Window x:Class="MyNameSpace.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:local="clr-namespace:MyNameSpace"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     
    WindowStartupLocation="CenterScreen"
    MinHeight="800" MinWidth="1000"
    Height="800" Width="1200" 
    Background="LightSteelBlue" HorizontalAlignment="Center" VerticalAlignment="Center">

2 个答案:

答案 0 :(得分:1)

您的第一个问题只与Visual Studio XAML编辑器相关。有时可能会因为不识别引用而感到痛苦。 我个人通过使用ReSharper来解决这个问题!

至于你的第二个问题,你明确地设计了一个Background属性。如果您想要连续更改文字颜色,可以为RowStyle创建DataGrid

                        <DataGrid.RowStyle>
                            <Style TargetType="{x:Type DataGridRow}">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding MeanPost, Converter={StaticResource meanToBool}, ConverterParameter=0}" Value="0">
                                        <Setter Property="Foreground" Value="{StaticResource brushRowSend}"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </DataGrid.RowStyle>

答案 1 :(得分:0)

您是否构建了解决方案?

它的构建是否正确??

我看到您的转换器代码中缺少一个右大括号。

这不是答案。由于我无法评论,我将其添加为答案。