0

所以,我创建了一个基于基本 XAML 的子类(见下文),但我在另一个项目中创建了子类,Visual Studio 在 TreeView 上给我一个错误,说“当前上下文中不存在名称“ViewTree” ”。但是,存在于同一项目中的其他子类没有相同的错误。为什么是这样?

我添加了对另一个项目的引用,并使用了相同的命名空间,但仍然没有乐趣。

谢谢!

基础 XAML:

<UserControl x:Class="myLibrary.Material.ViewTreeSpace.ViewingTree"
             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"
             mc:Ignorable="d" Background="#00000000" >
    <DockPanel>
        <TreeView Name="ViewTree" />
    </DockPanel>
</UserControl>

父代码隐藏:

namespace myLibrary.Material.ViewTreeSpace {
    public partial class ViewingTree : Usercontrol {
        public string TreeName = String.Empty;
        public ViewingTree(){ }
}

不同项目中的子类:

namespace myLibrary.Material.ViewTreeSpace {
    public class ImportedTree : ViewingTree {
        public ImportedTree() : base() {
            ViewTree.Items.Clear(); // <- This line gives me error
            TreeName = "My imported Tree in another project."; // <- This works
        }
}

编辑:我还注意到代码隐藏中存在的变量可以被引用,只有 UIElements 不能被引用。

编辑:收到@Liju 的回答后,我将 TreeView 设置为使用x:FieldModifier="public". 但是,我现在收到以下错误。

System.Exception: The component 'myLibrary.Material.ViewTreeSpace.ImportedTree' does not have a resource identified by the URI '/myLibrary;component/material/view%20tree/viewingtree.xaml'.
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at myLibrary.Material.ViewTreeSpace.ViewingTree.InitializeComponent()
at myLibrary.Material.ViewTreeSpace.ViewingTree..ctor()
at myLibrary.Material.ViewTreeSpace.ImportedTree..ctor() in c:\..\ImportedTree.cs:line 51

据我所知,不可能从不同的程序集中继承 XAML 类。(即回答“组件没有由 URI 标识的资源显然,这是自 2008 年以来的问题

编辑2:

使用@Liju的第二个答案,我尝试设置ResourceDictionary,但它说它无法加载资源。

System.InvalidOperationException: ResourceDictionary LoadFrom operation failed with URI 'pack://application:,,,/myLibrary;component/Material/View Tree/ViewingTree.xaml'.
at System.Windows.ResourceDictionary.set_Source(Uri value)
at myLibrary.Material.ViewTreeSpace.ImportedTree..ctor() in c:\..\ImportedTree.cs:line 59
4

2 回答 2

1

您可以将 x:FieldModifier 属性用作 Public x:FieldModifier="public"

默认字段修饰符值为“不公开”。

http://msdn.microsoft.com/en-us/library/vstudio/aa970905(v=vs.90).aspx

于 2013-02-20T20:39:31.243 回答
1

我假设您在运行时收到此错误。如果是这样,请在派生构造函数
示例代码中显式加载树视图资源:

    ResourceDictionary treeResource = new ResourceDictionary
    {
        Source = new Uri(@"pack://application:,,,/<<AssemblyName>>;component/<<Path to the xaml to load>>")
};
    this.Resources.MergedDictionaries.Add(treeResource);

希望这可以帮助!

于 2013-02-21T17:24:08.390 回答