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 の 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
4

2 に答える 2

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 に答える
1

x:FieldModifier 属性を Public x:FieldModifier="public" として使用できます。

デフォルトの fieldmodifier 値は「not public」です。

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

于 2013-02-20T20:39:31.243 に答える