以下是来自xaml的片段,用于定义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后,我得到以下内容:
标识符'CurrencyColorSelector'在XML命名空间'clr-namespace:EveTrader.Wpf.Selectors; assembly = EveTrader.Wpf'中不存在。第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;
}
}
}
DisplayWallets
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">
答案 0 :(得分:3)
好的,我修好了。问题是选择器的定义:
xmlns:selector="clr-namespace:EveTrader.Wpf.Selectors;assembly=EveTrader.Wpf"
。
由于CurrencyColorSelector类型驻留在EveTrader.Wpf程序集中,此定义创建了一个循环引用,它创建了错误 - 编译器尝试编译程序集EveTrader.Wpf,但由于selector
的定义,它试图先创建EveTrader.Wpf。这持续令人作呕。修复很简单:删除程序集定义:xmlns:selector="clr-namespace:EveTrader.Wpf.Selectors"
。
我在彻夜工作几个小时后解决了这个问题,再次证明,需要睡觉。非常感谢Igor的帮助。
答案 1 :(得分:0)
Binding中的路径通常是Binding一词之后的位。
{Binding MyCustomText}
^
|
Binding
<!--OR-->
{Binding Path=MyCustomText}
^
|
Binding
此错误表示绑定有问题。
StringFormat
绑定属性是从内存中的.NET 3.5引入的。检查您的WPF版本是否支持StringFormat
的好方法是查看类BindingBase
是否具有属性StringFormat
。
随着更新的信息,我什么都没得到:(看起来应该有效。