在我的应用程序我有有三种可能的状态切换按钮; “未”,“检查”和“先前使用的”。当用户来到这个特殊的屏幕,一些切换按钮将在“先前使用的”状态显示已经做了哪些工作。点击切换按钮(无论当前状态),将其放置到“选中”状态。只有这些切换按钮中的一个可以在同一时间进行检查。不同的状态由不同颜色的外发光,或根本没有发光的所有指示。

要设置外发光的“选中”状态我使用上一个器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>

有关的“之前使用的”状态I应用在代码外发光,而不是标记。我必须这样做,因为确定按钮应该是在这种状态下通过在列表检查值来实现。

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 );

不过,这只是使运作更令人费解的一点,因为你还必须确保你清楚,如果是前设置和尚未清除。

相反,你可以创建一个AttachedProperty PreviouslyUsed穿上ToggleButtons和使用Bindings让他们得到他们的价值多一些自动的。然后,参照本AttachedProperty值在你的触发器,你就会有一个PreviouslyUsed阴影,另一个用于IsChecked

你必须要连接的部分是绑定的,你可能不得不使用IValueConverter地方把mViews[i].LocalizedNametruefalsePreviouslyUsed

不幸的是,我不知道有足够的了解您的设置与mViews和这样提供有关更多的建议。我不知道你的ToggleButtons是否绑定与否的一部分。我怀疑他们是不是像你似乎中将其中的数组。如果您绑定的对象mViewsItemsSourceListBox,例如,你可以创建已生成的地方与AttachedProperty的DataTemplate一个ToggleButtons。这也将通过其绑定到该项目是否在IsChecked选择简化ListBox情况,然后采取ListBox确保只有一个被选中的照顾。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top