C# 如何在单独的可视状态组中处理冲突的可视状态设置器?
假设我在XAML ResourceDictionary中定义了一个单选按钮样式(没有代码隐藏):C# 如何在单独的可视状态组中处理冲突的可视状态设置器?,c#,xaml,uwp,uwp-xaml,C#,Xaml,Uwp,Uwp Xaml,假设我在XAML ResourceDictionary中定义了一个单选按钮样式(没有代码隐藏): ??? 现在,当CommonStates.CurrentState指向以下位置时,我想更改Content.Stroke属性: 选中检查状态时为青色 选中状态时为灰色。当前状态未选中 实现这一目标的最佳方式是什么 请注意,这只是一个简化的示例,用于展示我的问题,而我的问题在现实中要复杂得多(例如,我需要处理所有CommonState),因此我寻找一个体面的解决方案,而不是一个仅处理鼠标悬停行
???
现在,当CommonStates.CurrentState指向以下位置时,我想更改Content.Stroke属性:
- 选中检查状态时为青色
- 选中状态时为灰色。当前状态未选中
请注意,这只是一个简化的示例,用于展示我的问题,而我的问题在现实中要复杂得多(例如,我需要处理所有CommonState),因此我寻找一个体面的解决方案,而不是一个仅处理鼠标悬停行为的简单解决方法。根据您提供的代码,我们无法直接从PointerOver获取单选按钮的选定状态。您可以按照本机样式,创建两个椭圆,一个用于选定状态,另一个用于未选定状态。使用检查状态开关显示或隐藏。然后在PointerOver中设置笔划。例如:
<Ellipse x:Name="Content" Fill="{StaticResource RadioButtonOuterEllipseFill}" Height="20" StrokeThickness="{ThemeResource RadioButtonBorderThemeThickness}" Stroke="{ThemeResource RadioButtonOuterEllipseStroke}" UseLayoutRounding="False" Width="20"/>
<Ellipse x:Name="CheckedContent" Fill="{ThemeResource RadioButtonOuterEllipseCheckedFill}" Height="20" Opacity="0" StrokeThickness="{ThemeResource RadioButtonBorderThemeThickness}" Stroke="{ThemeResource RadioButtonOuterEllipseCheckedStroke}" UseLayoutRounding="False" Width="20"/>
选中CheckStates.CurrentState时,可以显示CheckedContent和隐藏内容,而未选中的则相反
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked">
<VisualState.Setters>
<Setter Target="Content.Opacity" Value="0"></Setter>
<Setter Target="CheckedContent.Opacity" Value="1"></Setter>
<Setter Target="CheckedContent.Fill" Value="White" />
<Setter Target="CheckedContent.Stroke" Value="Blue" />
</VisualState.Setters>
</VisualState>
......
</VisualStateGroup>
......
然后,您可以在PointerOver中为不同的状态设置笔划
<VisualState x:Name="PointerOver">
<VisualState.Setters>
<Setter Target="Content.Stroke" Value="Gray"></Setter>
<Setter Target="CheckedContent.Stroke" Value="Cyan"></Setter>
</VisualState.Setters>
</VisualState>
不错的出路。想到这个问题还没有找到答案,等你回答:)
<VisualState x:Name="PointerOver">
<VisualState.Setters>
<Setter Target="Content.Stroke" Value="Gray"></Setter>
<Setter Target="CheckedContent.Stroke" Value="Cyan"></Setter>
</VisualState.Setters>
</VisualState>