0

やや特別な問題があります。添付されたプロパティをチェックする必要があるマークアップ拡張機能があります。アタッチされたプロパティは継承可能として定義されています。

これは、Window / UserControlで定義されているすべての要素に対して、XAMLで適切に機能しますが、リソースに対しては機能しません。たとえば、このXAMLが与えられた場合:

<Window MyAttachedProp="...">
    <Window.Resources>
        <FlowDocument x:Key="Doc">
            <Paragraph><Run Text="{MyMarkupExtension}" /></Paragraph>
        </FlowDocument>
    </Window.Resources>

    <FlowDocumentScrollViewer Document="{StaticResource Doc}" />
    ...
</Window>

ProvideValue()関数が呼び出されたときに、添付されたプロパティがWindowからFlowDocumentおよびRunに派生しないため、マークアップ拡張は失敗します。

これを機能させるための同じ回避策はありますか?

ありがとう、スティーブン

4

1 に答える 1

1

ツリーの境界を越えてプロパティ値を継承することから:

プロパティの継承は、要素のツリーをトラバースすることによって機能します。このツリーは多くの場合、論理ツリーと並列です

どうやら、リソースディクショナリは要素ツリーを構成していないため、値は継承されません。ただし、FlowDocumentでプロパティを設定すると、要素ツリーのルートであるため、機能するはずです。

<Window.Resources>
    <FlowDocument x:Key="Doc" MyAttachedProp="...">
        <Paragraph><Run Text="{MyMarkupExtension}" /></Paragraph>
    </FlowDocument>
</Window.Resources>
于 2012-12-19T12:17:35.190 に答える