Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在单独的可视状态组中处理冲突的可视状态设置器?_C#_Xaml_Uwp_Uwp Xaml - Fatal编程技术网

C# 如何在单独的可视状态组中处理冲突的可视状态设置器?

C# 如何在单独的可视状态组中处理冲突的可视状态设置器?,c#,xaml,uwp,uwp-xaml,C#,Xaml,Uwp,Uwp Xaml,假设我在XAML ResourceDictionary中定义了一个单选按钮样式(没有代码隐藏): ??? 现在,当CommonStates.CurrentState指向以下位置时,我想更改Content.Stroke属性: 选中检查状态时为青色 选中状态时为灰色。当前状态未选中 实现这一目标的最佳方式是什么 请注意,这只是一个简化的示例,用于展示我的问题,而我的问题在现实中要复杂得多(例如,我需要处理所有CommonState),因此我寻找一个体面的解决方案,而不是一个仅处理鼠标悬停行

假设我在XAML ResourceDictionary中定义了一个单选按钮样式(没有代码隐藏):


???

现在,当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>