【发布时间】:2014-04-30 17:51:14
【问题描述】:
我有一个包含数据网格的 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 后:智能感知显示我的类 AboveMeanToBoolConverter。但是,该行突出显示“命名空间 clr-namespace:MyNameSpace 中不存在名称 AboveMeanToBoolConverter”
第二期
我在 app.xaml 中拥有我的应用程序和数据网格的所有样式。
下面是我在设置 DataGridRow 样式的部分中的 app.xaml 中 xaml 的 sn-p。Binding 行突出显示并告诉我“资源“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">
【问题讨论】:
-
我知道我问这个可能很愚蠢,但既然你没有提到它:你对
local标签的定义在哪里?你的Window的属性上应该有xmlns:local="clr-namespace:MyNameSpace之类的东西,对吗?如果是:转换器是否在不同的组件中? -
问起来一点也不傻。我已经在我的帖子中添加了更新。在那里你可以看到我在哪里定义了我的本地标签
-
当我阅读答案时,看起来它运行正常。 XAML 编辑器有时会因引用而变得痛苦(我通过使用 Resharper 修复了它。虽然不是免费的)。对于您的第二个问题,您的
DataTrigger专门更改了背景。ControlTemplate是DataGridRow还是DataGridCell? -
ControlTemplate 用于 DataGridRow。是的,它会构建,但是在 app.xaml 中,Binding 行仍然突出显示“资源 meanToBool 无法解析