2011-06-30 8 views
1

私はDataBindingで最初または最後にバインドされたアイテムを簡単にターゲットできますが、Panelのサブクラスの最初と最後のアイテムを暗黙的にスタイルする方法があるかどうかは疑問です。最初または最後である。私はちょうどスタイルを明示的に適用しなくても、純粋なXAMLでパネルの最初と最後の要素をスタイルできますか?

たとえば、私はこれを持っている

...

<UniformGrid Rows="1"> 
    <RadioButton Content="First" /> 
    <RadioButton Content="Middle" /> 
    <RadioButton Content="Another Middle" /> 
    <RadioButton Content="Last" /> 
</UniformGrid> 

...)。序数位置を使用したいと私は最初の項目でスタイルをターゲットにしたいです最後の項目には2番目の項目が表示されます。私は私ができる知っている、と述べた

...

  1. は、最初と最後の項目に明示的なスタイルを追加、または

  2. 最初と最後の項目に明示的に添付プロパティを追加し、スタイルトリガーでそれを使用してください。

(これは。私が傾いてる方法です)...しかし、再び、私はそれらの両方を避け、暗黙的なスタイリングで純粋なXAMLを行くことを願っています。

だからできますか?


UPDATE

今のところ、私は、一般的な接続 - プロパティのアプローチを行くことになりました。 First、Last、Defaultの値を持つUIHelper.PositionというAPを作成しました。それをテンプレート内のトリガーで参照し、それに応じてスタイルを設定します。

添付されたプロパティでコントロールに「タグ付け」する必要がありますが、それは私たちを邪魔にならず、複数のテンプレートで複数のスタイルを作成する必要がありません。 (私たちのテンプレートはテンプレートコントロールのプロパティではないCornerRadiusを内部的に使用していますので、単純にスタイルを変更することはできませんでした)トリガーで行う必要がありました。

しかし、添付された物件に、以下のように自由に回答してください。

答えて

0

すぐに気になるのはテンプレートセレクタです。コレクションが存在するコレクション内のオブジェクトの場所を評価し、それに基づいてTemplateの選択を判断することがあります。

If myCollection.IndexOf(myObj) = 0 Or myCollection.IndexOf(myObj) = myCollection.Count Then 
    Return TryCast(container.FindResource("FirstLastTemplate"), DataTemplate) 
Else 
    Return TryCast(container.FindResource("MiddleTemplate"), DataTemplate) 
End If 

Haventはそれをテストしましたが、うまくいくようです。 MVVMを使用している場合は、コンテナを介してViewModelにアクセスできます(私は思う)。

+0

ええ、それについて考えましたが、複数のテンプレートに頼る必要はありませんでした。実際には、テンプレートは、適用しているコントロールに存在しないCornerRadiusのようなプロパティを使用するため、テンプレート自体を手動で再作成しなければ、使用することはできません(TemplateBindingやバインディングは使用できません)。私は、それを処理するための汎用の添付プロパティを作成しました。私は上記の質問に追加します。 – MarqueIV

関連する問題