【发布时间】:2010-05-14 01:30:41
【问题描述】:
以下是来自 xaml 的 sn-p,在 Control 中定义 DataGrid,定义模板选择器。
<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。
CurrencyColorSelector
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">
【问题讨论】:
-
您能否发布货币选择器的代码以及您的 XAML 文件中定义的
selector:什么? -
我想知道它是否与需要添加到 XAML 项目中的
EveTrader.Wpf的引用有关?也许他们去了不同的输出文件夹,如果没有参考,它可能会在运行时失败。但仍然没有解释设计时错误。 -
您是否考虑向 VS 支持团队报告此问题?保证成为 Visual Studio 本身的错误似乎很奇怪且无法解释。
-
Igor:EveTrader.Wpf 是 xaml 所在的程序集/项目。