0

很难想出一个简洁的标题!

我在一个解决方案中有两个 WPF 项目。第一个,WpfApplication 定义 Class1。第二,WpfControlLibrary 定义从 Class1 继承的 Class2、从 Class2 继承的 Class3 和 UserControl1。它们如下所示:

WpfApplication Class1

namespace WpfApplication5
{
  public class Class1
  {
    public string Property1 { get; set; }
  }
}

WpfControlLibrary Class2 和 Class3

namespace WpfControlLibrary1
{
  public class Class2
  {
    public string Property2 { get; set; }
  }
  public class Class3 : Class2
  {
    public string Property3 { get; set; }
  }
}

总之,Class 1 有 Property1,Class2 有 Property1(通过继承)和 Property2,Class3 有 Property1 和 Property2(都通过继承)和 Property3。用户控件的 XAML 是:

<UserControl x:Class="WpfControlLibrary1.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:b="clr-namespace:WpfApplication5;assembly=WpfApplication5"
         xmlns:l="clr-namespace:WpfControlLibrary1"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
  <UserControl.Resources>
      <b:Class1 x:Key="test1" Property1="xxx" />
      <l:Class2 x:Key="test2" Property1="xxx" Property2="yyy" />
      <l:Class3 x:Key="test3" Property2="yyy" Property3="zzz" />
      <l:Class3 x:Key="test4">
        <l:Class3.Property1>xxx</l:Class3.Property1>
        <l:Class3.Property2>yyy</l:Class3.Property2>
        <l:Class3.Property3>zzz</l:Class3.Property3>
      </l:Class3>
  </UserControl.Resources>
  <Grid>

  </Grid>

问题是 XAML 无法编译,并给出以下错误:

The property 'Property1' does not exist in XML namespace 'clr-namespace:WpfControlLibrary1'.
The property 'Property1' was not found in type 'Class2'.
The attachable property 'Property1' was not found in type 'Class3'.

看起来 XAML 无法处理从不同程序集继承的属性。这是对的吗,还是我看了太久了。我尝试了设置 Property1 和事件的不同形式,b:Property1=b:Class1.Property1=似乎都不起作用。还是我一直在研究这个太久和过于复杂的事情?

4

1 回答 1

0

尽管我在上面引用了我的坏例子,但我将在这里添加我自己的答案,以尝试解释我认为发生的事情,以供其他任何发生的人使用。

当您使用 XAML 从不同的程序集实例化对象时,命名空间如下所示:

xmlns:b="clr-namespace:WpfApplication5;assembly=WpfApplication5"

请注意,它具有命名的程序集。它似乎也将程序集复制到 bin 文件夹中。就我而言,发生了一些疯狂的事情,并且复制的程序集已经有几个小时了。因此,即使 c# 可以编译,XAML 也不能。发生了一些神奇的事情,因此该程序集的构建在配置管理器中神秘地未选中。但是,再次检查并重建仍然没有重建 exe。在这种兴奋中,Visual Studio 崩溃并重新启动(仅仅是我还是 VS2010 经常发生这种情况)。

最后我不得不删除所有的 DLL 项目并自己构建主应用程序。然后我可以重新添加 DLL 项目并进行编译。然后一切都按预期工作。

于 2012-06-28T12:35:48.083 回答