そのため、ベース 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 の 2 番目の回答を使用して、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