Wpf资源:“未知的构建错误,'路径不能为空......”

时间:2010-05-14 01:30:42

标签: c# wpf xaml

以下是来自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">

2 个答案:

答案 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

随着更新的信息,我什么都没得到:(看起来应该有效。