WPFは、コードではなく、XAMLで設定された値に影響を与えるトリガー

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

  •  12-09-2019
  •  | 
  •  

質問

私のアプリでは、私は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で設定されていない何かに影響を与えないだろうか?

役に立ちましたか?

解決

あなたはDropShadowEffectButtonを設定すると、

、あなたはButtonEffect)であるDependencyPropertyButton.EffectPropertyプロパティのローカル値を設定しています。それは次のようにクリアされるまで、ローカル値は、他の可能な値を上書きします:

button1.ClearValue( Button.EffectProperty );
あなたも前に設定し、まだクリアされていません。

あれば必ず明確にする必要があるため、

しかし、それはちょうど、仕組みはもう少し複雑になり

その代わり、あなたはPreviouslyUsedsに入れて、彼らは彼らの値を取得するので、もう少し自動的ToggleButtonを使用するようにAttachedPropertyのBindingsを作成することができます。次に、あなたのトリガーでこのAttachedProperty値を参照し、PreviouslyUsedのための1つのドロップIsCheckedのシャドウ、および別のものを持っています。

あなたがアップ配線する必要があります一部が結合され、そしておそらくIValueConverterためmViews[i].LocalizedNameまたはtruefalseを回すためにどこかPreviouslyUsedを使用する必要があります。

残念ながら、私はそれについての詳細なアドバイスを提供するmViewsなどとセットアップについて十分に知りません。私はあなたのToggleButtonsはデータバインディングの一部であるかどうかわかりません。私はあなたがそれらの配列を反復処理しているように見えるとして、彼らは、ないことを疑います。あなたがmViewsItemsSourceにごListBoxオブジェクトをバインドした場合、たとえば、あなたはすでに適所にAttachedPropertyとDataTemplateを生成ToggleButtonsを作成することができます。それはまた、そのアイテムがIsCheckedに選択されているかどうかにそれを結合することによって、あなたのListBox状況を単純化し、その後ListBoxは一つだけが選択されていることを確認しての世話をします。

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