WPFは、コードではなく、XAMLで設定された値に影響を与えるトリガー
質問
私のアプリでは、私は3つの状態を持っているトグルボタンを持っています。 「チェックなし」、「チェック」、および「以前使用」。ユーザーは、この特定の画面になると、トグルボタンのいくつかは、作業が行われているかを示すために、「以前使用」の状態になります。トグルボタン(関係なく、現在の状態)をクリックすると、「チェック済み」状態にそれを配置します。のみ、これらのトグルボタンのいずれかを一度に確認することができます。異なる状態は、異なる色の外側の輝き、あるいは全くグローで示されています。
にisCheckedに私が使用する「チェック」状態トリガーのための外側の輝きを設定するには、真euqals。
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="Salmon" BlurRadius="40" ShadowDepth="0" Opacity="1.0"></DropShadowEffect>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
「以前に使用」の状態のために私はコードではなく、マークアップで、外側グローを適用します。私はボタンがリスト内の値をチェックすることによって行われ、この状態であるべきかを決定するため、これをしなければなりません。
if (mExistingViews.Contains(mViews[i].LocalizedName))
{
DropShadowEffect dse = new DropShadowEffect();
dse.ShadowDepth = 0;
dse.BlurRadius = 20;
dse.Opacity = 1.0;
dse.Color = Colors.Yellow;
mViewButtons[i].Effect = dse;
}
しかし、トグルボタンが「以前に使用」の状態で、トリガはどんな効果があると思われないときクリックされたとき。外側の輝きは変更されません。
私が間違って何をしているのですか?トリガーはXAMLで設定されていない何かに影響を与えないだろうか?
解決
DropShadowEffect
にButton
を設定すると、、あなたはButton
(Effect
)であるDependencyProperty
のButton.EffectProperty
プロパティのローカル値を設定しています。それは次のようにクリアされるまで、ローカル値は、他の可能な値を上書きします:
button1.ClearValue( Button.EffectProperty );
あなたも前に設定し、まだクリアされていません。あれば必ず明確にする必要があるため、しかし、それはちょうど、仕組みはもう少し複雑になり
その代わり、あなたはPreviouslyUsed
sに入れて、彼らは彼らの値を取得するので、もう少し自動的ToggleButton
を使用するようにAttachedPropertyのBindings
を作成することができます。次に、あなたのトリガーでこのAttachedProperty値を参照し、PreviouslyUsed
のための1つのドロップIsChecked
のシャドウ、および別のものを持っています。
あなたがアップ配線する必要があります一部が結合され、そしておそらくIValueConverter
ためmViews[i].LocalizedName
またはtrue
にfalse
を回すためにどこかPreviouslyUsed
を使用する必要があります。
残念ながら、私はそれについての詳細なアドバイスを提供するmViews
などとセットアップについて十分に知りません。私はあなたのToggleButtons
はデータバインディングの一部であるかどうかわかりません。私はあなたがそれらの配列を反復処理しているように見えるとして、彼らは、ないことを疑います。あなたがmViews
のItemsSource
にごListBox
オブジェクトをバインドした場合、たとえば、あなたはすでに適所にAttachedPropertyとDataTemplate
を生成ToggleButtons
を作成することができます。それはまた、そのアイテムがIsChecked
に選択されているかどうかにそれを結合することによって、あなたのListBox
状況を単純化し、その後ListBox
は一つだけが選択されていることを確認しての世話をします。