質問

次のように単純なimarkupextensionがあります:

public class HelloWorldMarkup : IMarkupExtension<string>
{
    public string ProvideValue(IServiceProvider serviceProvider)
    {
        return "Hello World";
    }
    public override string ToString()
    {
        return "DesignTime Hello World";
    }
}

そして、このようにそれを使用する私のXaml ..

<StackPanel>
    <TextBlock Text="{my:HelloWorldMarkup}" />
    <HyperlinkButton Content="{my:HelloWorldMarkup}" />
</StackPanel>

実行時には、すべてが期待どおりに機能します。

ただし、設計時には、ハイパーリンクの内容には(ToStringから)設計時間値が表示されますが、TextBlockのテキストには表示されません。

このように残した場合、デザイナーは何日も私に泣き叫びます。マークアップがテキストブロックテキストにデザイン時間データを表示する方法について何か提案がありますか?

どうもありがとう、

役に立ちましたか?

解決

試す..

<TextBlock DataContext="{my:HelloWorldMarkup}" Text="{Binding}" />

他のヒント

あなたは正しい軌道に乗っています。この(「デザインによる」)問題にいくつかの素晴らしい回避策があります:

インターフェイスImarkUpextensionを使用し、コンテンツプロパティ(ContentControlなど)で何らかのコントロールから派生します。ここで、「親」プロパティの変更を聞いてください(添付のプロパティを使用して、トリッキーな回避策を使用する必要がある場合があります)。イベントコールバックは、カスタムの単純なiProvideValueTargetの実装を使用して、独自にdetlumentValueを呼び出す必要があります。その後、Valueの結果は「コンテンツ」プロパティに割り当てる必要があります。 Valueはコントロールの前に評価され、設計時間の魅力のように機能するため、これはランタイムに影響しません。

また、ターゲットプロパティのバインディングをインストールすることを考えているため、ベースクラスをフレームワークセレメントに削減します。

参照する https://github.com/mrcircuit/xamlmarkupextensionshttps://github.com/mrcircuit/wpflocalizationextension このプロセスの例。

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