代码之家  ›  专栏  ›  技术社区  ›  Femaref

WPF资源:“未知生成错误,”路径不能为空…

  •  0
  • Femaref  · 技术社区  · 15 年前

    下面是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">
    
    2 回复  |  直到 15 年前
        1
  •  3
  •   Femaref    15 年前

    好吧,我修好了。问题在于选择器的定义:

    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" .

    我在通宵工作几个小时后解决了这个问题,这再次证明需要睡眠。不管怎样,谢谢你的帮助。

        2
  •  0
  •   Igor Zevaka    15 年前

    绑定中的路径通常是单词绑定之后的位。

    {Binding MyCustomText}
              ^
              |
            Binding
    
    <!--OR-->
    
    {Binding Path=MyCustomText}
                   ^
                   |
                 Binding
    

    此错误表示绑定有问题。

    StringFormat 在从内存到.NET 3.5的Service Pack中引入了绑定属性。检查您的WPF版本是否支持的好方法 串格式 是看是否上课 BindingBase 有财产 串格式 .

    有了最新的信息,我什么也没得到:(看起来应该可以用了。

    推荐文章