C# WPF使用IValueConverter并引用app.xaml中的类
我有一个包含datagrid的WPF应用程序。我正在尝试使用自定义值转换器来决定单元格的字体颜色 我已经创建了下面的类C# WPF使用IValueConverter并引用app.xaml中的类,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个包含datagrid的WPF应用程序。我正在尝试使用自定义值转换器来决定单元格的字体颜色 我已经创建了下面的类 namespace MyNameSpace { public class AboveMeanToBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globaliza
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;
}
}
在我的主窗口xaml中,我有以下内容
<Window.Resources>
<local:AboveMeanToBoolConverter x:Key="meanToBool"/>
</Window.Resources>
第一期:
输入local:intellisense后,我的类显示在meanstoboolconverter上。但是,该行突出显示为“名称空间clr namespace:MyNameSpace中不存在MeanstoBoolconverter上的名称”
第二期
我在app.xaml中有我的应用程序和datagrid的所有样式
下面是我正在设置DataGridRow样式的部分中我的app.xaml中的xaml片段。绑定行高亮显示,并告诉我“资源”meanToBool“无法解析”。那么我如何在我的app.xaml中引用我的转换器呢?另外,我的setter指的是一个边框(从正在工作的东西复制和粘贴)-如何更改它,使字体改变颜色而不是单元格的背景
<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">
您构建了解决方案吗 它的建筑是否正确 我看到您的转换器代码中缺少右括号
这不是答案。由于我无法发表评论,我将其添加为答案。您的第一个问题看起来与Visual Studio XAML编辑器相关。有时,由于无法识别引用,这可能会让您感到痛苦。 我个人通过使用ReSharper解决了这个问题 至于第二个问题,您正在明确设置
背景
属性的样式。如果要更改行中的文本颜色,可以为数据网格创建行样式
:
<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>
我知道我问这个问题可能很愚蠢,但既然你没有提到:local
标记的定义在哪里?你应该在窗口的属性上有类似xmlns:local的内容=“clr namespace:MyNameSpace
对吗?如果是这样的话:转换器是否在另一个程序集中?问起来一点都不傻。我已经在帖子中添加了一个更新。在那里你可以看到我在哪里定义了我的本地标记,正如我在回答中读到的,看起来它运行正常。XAML编辑器有时会因为引用而令人痛苦。”(我用Resharper修复了这个问题,但不是免费的)。对于第二个问题,您的DataTrigger
会专门更改背景。是DataGridRow
的ControlTemplate
还是DataGridCell
?ControlTemplate是DataGridRow的。是的,它会生成,但是在app.xaml中,绑定行仍然突出显示为"资源MeansToBool无法解析,因为它构建得很好。datagrid正确显示了所有数据。但是,我希望根据单元格的值使用不同颜色的单元格不起作用。例如,如果属性MeansPost小于0,则应为红色。这不会发生您的第一个问题是r吗esolved now?你能提供你的xaml代码供我检查吗?谢谢你的代码。当我运行应用程序时,我在错误列表中看到资源意味着无法解析工具。它还说我的转换器类不存在于名称空间“clr namespace:MyNameSpace”中。如果你在your转换器中放置断点,它会通过吗?如果资源是实际上没有解决,代码应该抛出一个XamlParseException,并阻止您运行它。如果您可以很好地运行它,您应该没有问题,因为它不再加载了。在绑定{}之后,我将Value=0更改为Value=“True”。我发现发生了XamlParseException。PresentationFramework.dll{“System.Windows.Markup.XamlParseException”中发生了类型为“System.Windows.Markup.XamlParseException”的第一次意外异常,{“System.Windows.Markup.StaticResourceHolder”上的“提供值”引发了异常。“行号为“292”和行位置为“42”。}因此我的转换器类没有被命中,但应用程序不再加载