如何为UWP中的RatingControl星星设置颜色?

时间:2018-10-17 05:32:26

标签: xaml uwp

我在UWP应用程序中添加了RatingControl。如何设置实心和空星星的颜色?这是我添加的代码:

<RatingControl x:Name="MyRating" Value="3.5" Width="300" Height="200"  />

1 个答案:

答案 0 :(得分:3)

如果您检查RatingControl的默认样式,则可以找到以下VisualStateGroup

<VisualStateGroup x:Name="CommonStates">
    <VisualState x:Name="Disabled">
        <VisualState.Setters>
            <Setter Target="ForegroundContentPresenter.Foreground" 
              Value="{ThemeResource RatingControlDisabledSelectedForeground}"/>
        </VisualState.Setters>
    </VisualState>
    <VisualState x:Name="Placeholder">
        <VisualState.Setters>
            <Setter Target="ForegroundContentPresenter.Foreground"
               Value="{ThemeResource RatingControlPlaceholderForeground}"/>
        </VisualState.Setters>
    </VisualState>
    <VisualState x:Name="PointerOverPlaceholder">
        <VisualState.Setters>
            <Setter Target="ForegroundContentPresenter.Foreground" 
               Value="{ThemeResource RatingControlPointerOverPlaceholderForeground}"/>
        </VisualState.Setters>
    </VisualState>
    <VisualState x:Name="PointerOverUnselected">
        <VisualState.Setters>
            <Setter Target="ForegroundContentPresenter.Foreground" 
                Value="{ThemeResource RatingControlPointerOverUnselectedForeground}"/>
        </VisualState.Setters>
    </VisualState>
    <VisualState x:Name="Set">
        <VisualState.Setters>
            <Setter Target="ForegroundContentPresenter.Foreground"
                Value="{ThemeResource RatingControlSelectedForeground}"/>
        </VisualState.Setters>
    </VisualState>
    <VisualState x:Name="PointerOverSet">
        <VisualState.Setters>
            <Setter Target="ForegroundContentPresenter.Foreground" 
                Value="{ThemeResource RatingControlSelectedForeground}"/>
        </VisualState.Setters>
    </VisualState>
</VisualStateGroup>

如您所见,颜色基于RatingControlSelectedForegroundRatingControlPointerOverUnselectedForeground等资源。

您可以将这些内容的自定义替代作为单独的资源提供,也可以编辑控件的样式。

注意-空星星颜色

尽管它不是模板的一部分,但是您可以通过修改RatingControlUnselectedForeground资源来自定义空星星的颜色。

资源替代

您可以在单个分级控制级别,任何父级或应用程序级别覆盖资源。

RatingControl级别上的覆盖将仅应用于单个RatingControl

<RatingControl x:Name="MyRating" Value="3.5" Width="300" Height="200" >
    <RatingControl.Resources>
       <SolidColorBrush x:Key="RatingControlSelectedForeground" Color="Red" />
       <SolidColorBrush Color="Blue" x:Key="RatingControlUnselectedForeground" />
    </RatingControl.Resources>
</RatingControl>

您可以在任何父级上进行覆盖,例如在页面上

<Page.Resources>
    <SolidColorBrush x:Key="RatingControlSelectedForeground" Color="Red" />
    <SolidColorBrush Color="Blue" x:Key="RatingControlUnselectedForeground" />
</Page.Resources>

或者最后,如果您将其添加到<Application.Resources>的{​​{1}}中,则可以将其置于应用程序级别。然后它将应用于应用程序中的任何App.xaml

替代解决方案-自定义样式

如果您想要更多的控制甚至更好的自定义,则可以直接编辑默认的RatingControl样式及其模板。 在设计器中(或在“文档大纲”窗口中)右键单击RatingControl,然后选择编辑样式,然后编辑副本,设置自定义名称和位置。应该放置样式,然后按确定进行确认。这将创建控件默认模板的副本,您可以在其中编辑RatingControl VisualState值以匹配所需的配色方案。

还请注意,您仍然必须为空星Setter)提供自定义资源。