下面是XAML中定义控件中数据报、定义模板选择器的代码段。
<DataGrid.Resources>
<selector:CurrencyColorSelector x:Key="currencyColorSelector">
<selector:CurrencyColorSelector.NegativeTemplate>
<DataTemplate>
<TextBlock Text="{Binding Balance, StringFormat=n}" Background="Red"/>
</DataTemplate>
</selector:CurrencyColorSelector.NegativeTemplate>
<selector:CurrencyColorSelector.NormalTemplate>
<DataTemplate>
<TextBlock Text="{Binding Balance, StringFormat=n}"/>
</DataTemplate>
</selector:CurrencyColorSelector.NormalTemplate>
</selector:CurrencyColorSelector>
</DataGrid.Resources>
现在,引发了一个错误:“未知的生成错误”,路径不能为空。参数名称:路径行27位置79。“”(编译器或XAML验证错误)。
编辑
重新启动Visual Studio 2010后,我得到以下信息:
XML命名空间“clr namespace:evetrader.wpf.selectors;assembly=evetrader.wpf”中不存在标记“currencycolorselector”。第27行位置18。
这使它更奇怪,因为我甚至有智力为班级。
我不知道这条路径是从哪里来的,我的示例也没有显示任何路径。如果双击错误,它将指向
<selector:CurrencyColorSelector x:Key="currencyColorSelector">
(第27行)。
有没有人遇到过这样的问题并有解决办法?示例如下:
http://www.wpftutorial.net/DataGrid.html
(行详细信息取决于数据类型)
澄清
这低于.NET 4.0。这个问题与currencycolorselector有关,因为如果单独在DataGridTemplateColumn中使用模板,模板本身就可以正常工作。
CurrencyColorSelector
来源于
DataTemplateSelector
.
货币颜色选择器
namespace EveTrader.Wpf.Selectors
{
public class CurrencyColorSelector : DataTemplateSelector
{
public DataTemplate NegativeTemplate { get; set; }
public DataTemplate NormalTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var data = item as DisplayWallets;
if (data == null)
return base.SelectTemplate(item, container);
if (data.Balance < 0m)
return NegativeTemplate;
return NormalTemplate;
}
}
}
显示钱包
public class DisplayWallets
{
public string Name { get; set; }
public decimal Balance { get; set; }
}
XAML选择器定义
<UserControl x:Class="EveTrader.Wpf.WalletsView"
xmlns:selector="clr-namespace:EveTrader.Wpf.Selectors;assembly=EveTrader.Wpf">