我正在使用一个自定义控件RadioButton
,该控件允许用户根据所选的RadioButton
.
但是,在我的应用程序中,有时 5RadioButtons
被禁用,然后重新启用。发生这种情况时VisualState
,已选中 RadioButton
的不会激活。相反,所有 5 个都RadioButtons
显示为正常状态。
为什么会这样?我该如何解决这个问题?
这是RadioButtons
我正在使用的示例。
如果我从选择第一组 5 开始RadioButtons
,然后进行选择,那么一切都可能如上图所示。
但是,如果我选择第二组 5 RadioButtons
,我的控件被设计为第一组将禁用。这工作正常,第二组正确启用。之后,如果我再次选择第一组,每个组Radiobutton
都会出现Normal VisualState。这是一个问题,因为我的程序知道#1在幕后仍然是Checked。Checked VisualState没有被触发,所以它看起来像这样:
这里的目标是Checked VisualState
将恢复,因为它出现在第一张图像中。
这是相应的 XAML 代码VisualStates
:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState Name="Normal"/>
<VisualState Name="Disabled">
<Storyboard>
<ColorAnimation Storyboard.TargetName="FillBrush" Storyboard.TargetProperty="Color" To="#FFEEEEEE" Duration="0"/>
<ColorAnimation Storyboard.TargetName="StrokeBrush" Storyboard.TargetProperty="Color" To="#FF777777" Duration="0"/>
<DoubleAnimation Storyboard.TargetName="MoodEllipse" Storyboard.TargetProperty="StrokeThickness" To="1" Duration="0"/>
<ColorAnimation Storyboard.TargetName="Presenter" Storyboard.TargetProperty="(TextBlock.Foreground).Color" To="#FF777777" Duration="0"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CheckStates">
<VisualState Name="Checked">
<Storyboard>
<ParallelTimeline>
<ColorAnimation Storyboard.TargetName="FillBrush" Storyboard.TargetProperty="Color" To="#FFC5F5FF" Duration="0:0:0.05"/>
<ColorAnimation Storyboard.TargetName="StrokeBrush" Storyboard.TargetProperty="Color" To="#FF12394F" Duration="0:0:0.05"/>
<DoubleAnimation Storyboard.TargetName="MoodEllipse" Storyboard.TargetProperty="StrokeThickness" To="2" Duration="0:0:0.05"/>
</ParallelTimeline>
</Storyboard>
</VisualState>
<VisualState Name="Unchecked"/>
<VisualState Name="Indeterminate"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
这个 XAML 代码似乎是按照如何使用VisualStates
的,但我想它一定有问题。
我参考了这些页面:
作为一些附加说明,我注意到如果单击其中一个Unchecked可以触发Checked 。此时,一切正常——直到禁用并重新启用该组。VisualState
RadioButtons
RadioButtons
此外,当我没有在上面的 XAML 代码中包含空的Unchecked时,我遇到了Checked 甚至更奇怪的行为。VisualState
VisualState
任何关于为什么VisualStates
行为奇怪的见解将不胜感激。非常感谢!
编辑:
我不确定这是否重要,但组 ofRadioButtons
被禁用,因为它们StackPanels
的IsEnabled
属性绑定到 outsideRadioButton
的IsChecked
属性:
<StackPanel IsEnabled="{Binding RelativeSource={RelativeSource AncestorType={x:Type RadioButton}}, Path=IsChecked}">