所以,我创建了一个基于基本 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