0

私のアプリには、3 つの状態を持つトグル ボタンがあります。「未チェック」、「チェック済み」、「以前使用していた」。ユーザーがこの特定の画面に来ると、トグル ボタンの一部が「以前に使用された」状態になり、どのような作業が行われたかが示されます。トグル ボタンをクリックすると (現在の状態に関係なく)、「チェック済み」状態になります。一度にチェックできるトグル ボタンは 1 つだけです。さまざまな状態は、さまざまな色の外側のグロー、またはまったくグローがないことで示されます。

「チェック済み」状態の外側のグローを設定するには、IsChecked euqals true でトリガーを使用します。

<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 で設定されていないものには影響しませんか?

4

1 に答える 1

2

にを設定すると、 'sプロパティのローカル値である( )が設定さDropShadowEffectれます。ローカル値は、次のようにクリアされるまで、他の可能な値を上書きします。ButtonButtonEffectDependencyPropertyButton.EffectProperty

button1.ClearValue( Button.EffectProperty );

ただし、以前に設定されていてまだクリアされていない場合は、必ずクリアする必要があるため、作業が少し複雑になります。

代わりに、AttachedPropertyを作成して、 sPreviouslyUsedを配置して使用し、値をもう少し自動的に取得することができます。次に、トリガーでこのAttachedProperty値を参照すると、のドロップシャドウが1つ、のドロップシャドウがもう1つあります。ToggleButtonBindingsPreviouslyUsedIsChecked

配線する必要があるのはバインディングであり、おそらくIValueConverterどこかを使用してまたはにmViews[i].LocalizedName変換する必要があります。truefalsePreviouslyUsed

残念ながら、私はあなたのセットアップなどについて十分に知らないので、mViewsそれについてもっとアドバイスを提供することができます。ToggleButtonsあなたがデータバインディングの一部であるかどうかはわかりません。あなたがそれらの配列を繰り返しているように見えるので、私はそれらがそうではないのではないかと思います。mViewsたとえば、オブジェクトをのにItemsSourceバインドした場合、AttachedPropertyがすでに配置されている状態でを生成するをListBox作成できます。また、でそのアイテムが選択されているかどうかにバインドすることで状況を簡素化し、1つだけが選択されていることを確認します。DataTemplateToggleButtonsIsCheckedListBoxListBox

于 2009-08-07T00:19:27.097 に答える