擬似ワイトのみの依存関係プロパティを書くにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/5399131

質問

OK、これは一種の「擬似ワイト - のみ」依存関係のプロパティに関して、私が頭に浮かんでいるアイデアです。私は言う 一種の 私は実際に値を保存したくないので、むしろセッターに渡す値を設定したいからです 他の プロパティ。仮説的な例として、私はこれをやりたいです...

<button UIHelper.Bounds="10,10,40,20" />

これの代わりに...

<button Canvas.Left="10" Canvas.Top="10" Width="40" Height="20" />

XAMLタイピングの便利なもので、実際の4つのプロパティを簡単に入力しやすいもので、書き込みのみの添付プロパティを言ってもらうことができます。崩壊したCSSルールの方法に沿って考えてください。実際、その効果のために、ここに別の...

<border UIHelper.BrushSpec="AliceBlue Red 2 4" />

それ以外の...

<border Background="AliceBlue" BorderBrush="Red" BorderThickness="2" CornerRadius="4" />

最初の例を例として使用して、1つのアイデアはそのような構造を内部に保存し、既存の幅、高さ、キャンバス、左、キャンバスのプロパティと同期することですが、私はそれを読み返すつもりはありませんだからそれは必要ありません。 (技術的には、それを完全に保存することを無視し、プロパティチェンジのハンドラーにClearValueを呼び出すだけですが、繰り返しますが、それは実際にはそれを読み返すためではないので、それは一貫性のためだけです。)

技術的には、XAMLから設定する必要がある場合、DPでなければならない場合、DPであることを除いて、これをDPにする必要さえありません。実装を設定し、必要に応じて自らを再構築できるように、ストレートアップ.NETプロパティを設定できれば完璧ですが、繰り返しますが、XAMLから.NETプロパティにアクセスできないことを理解しています。 Mここに戻って。

今、私はこの概念が多くの人々、特にXAMLの純粋主義者によって眉をひそめられることを知っていますが、私は尋ねています どうやって いいえ どうして したがって、他の理由がない場合は、これを「できますか」の演習であると考えてください。これが私が使用するものであることを示唆していません。私はDPSとXAMLの限界をよりよく理解しようとしているだけで、このようなエクササイズは本当に役立つと思います。

だから、考え??

m

正しい解決策はありません

他のヒント

独自のXAMLコンパイラを書くことの極端に行くことなく、あなたができる最善のことは、あなたが定義するいくつかのコンパクトな構文に基づいて、興味のあるプロパティのグループを設定する添付のプロパティだと思います。はい、これはコンパクトな表現にストレージを割り当てたことを意味しますが、あなたが言うように、あなたは応募後すぐにそれをクリアすることができます。それは少し非正統的ですが、技術的には機能します。

また、添付のプロパティフィールドをまったく宣言しないようにして、Get/Setメソッドを介して値にアクセスできるようにすることもできます(これを試していませんが、DPがプライベートなときに機能すると思います。このようにして、関連するプロパティの変更を聞くのに苦労することなく、実際に読みやすくすることができます。もちろん、それはあなたの財産に変更通知がないことを意味します:

public static string GetBounds(UIElement uiElement)
{
    return Canvas.GetLeft(uiElement) + "," + ...;
}

public static void SetBounds(UIElement uiElement, string compact)
{
    // parse and apply compact
}

コンパクトな表現をaに置いているだけです string 上記ですが、おそらく特定のタイプを使用する必要があります。繰り返しますが、上記は機能しないかもしれません - 関連する必要があるかもしれません DependencyProperty 実例。 Windowsマシンに乗っていたら、試してみます。

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