Silverlight5 MarkUpextension設計時に
-
26-10-2019 - |
質問
次のように単純な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/xamlmarkupextensions と https://github.com/mrcircuit/wpflocalizationextension このプロセスの例。