質問

xaml ファイル(wpf usercontrol)、参照する方法はありますか 内部クラス 別のクラス「A」で定義された「B」?

public class A
{
    public class B
    {
    }
}

何かのようなもの :

<local:A.B ... />

「B」はクラス「A」の「B」という名前のプロパティとして解釈されるため、この構文は機能しません。

「::」または「+」のようなよりエキゾチックな構文を試しましたが、何も機能しないようです。

私は現在使用しています シルバーライト4vs2010.

よろしくお願いします。

役に立ちましたか?

解決

私は検索と検索をしていました。これが可能なら、私は知りたいからです。残念ながら、私はこれを見つけました MSDN:

カスタムクラスはネストされたクラスであってはなりません。ネストされたクラスとそれらの一般的なCLR使用の「ドット」構文は、添付のプロパティなどの他のWPFおよび/またはXAML機能を妨害します。

そのため、ネストされたクラスをDOT演算子で参照できないようです。 XAMLを通じてその内部クラスに到達する別の方法については、私はまだ検索で運がありませんでした。 :o(しかし、これはかなり興味深い問題なので、私は検索を続けます。たぶん私は運を見つけます!:o)

他のヒント

この質問はかなり古く、2010年にWPFのバージョンで機能したかどうかはわかりませんが、ネストされたタイプの「実際の」(内部)名前を使用して機能させることができます。

<local:A+B />

分解されたコードを見たことがあるなら、それがネストされたタイプのように見えます。

ParentTypeName+Nested

. を指します 財産; Xamlがネストされたクラスを検索できなかった理由はわかりませんが、そうではありません。


ネストされたクラス できる 表現されます 文字列の中に (例:プロパティ値)、使用 A+B それ以外の A.B:

<Label SomeProperty1="{x:Static local:A+B.SomeProperty2}" />

要素名として (問題に示されているように)、 + 結果はもはや有効ではないため、許可されていません。 + 有効な名前の文字ではありません:
XAMLはXMLです.
XML Spec -Namechar.

そのため、要素名はネストされたクラスを直接記述することはできません。
ただし、以下の更新を参照してください - これを解決する代替構文。


アップデート
@artfunkelの1つの答えに関するコメントに従って、これは解決策である必要があります[私はテストしていません]:

<x:Type TypeName="local:A+B"/>

から: https://docs.microsoft.com/en-us/dotnet/framework/xaml-services/x-type-markup-extion

TBD指定方法 プロパティ その構文で。使用する x:TypeArguments?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top