WinUI XAML中如何让Slider自动关联Foreground/Background到状态资源?
解决方案:全局绑定Slider交互状态颜色到自身Foreground/Background
你可以通过定义全局可复用的Slider样式,把交互状态下的Track填充色绑定到Slider自身的Foreground和Background属性,这样所有Slider只需设置这两个属性,就能自动同步悬停、按下等状态的颜色,无需重复编写Resources代码。
步骤1:添加全局样式到App.xaml
在项目的App.xaml的ResourceDictionary中添加以下样式,它会对所有Slider生效:
<Style TargetType="Slider"> <Style.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Dark"> <!-- 绑定到Slider的Foreground颜色 --> <SolidColorBrush x:Key="SliderTrackValueFillPointerOver" Color="{Binding Foreground.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/> <SolidColorBrush x:Key="SliderTrackValueFillPressed" Color="{Binding Foreground.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/> <!-- 绑定到Slider的Background颜色 --> <SolidColorBrush x:Key="SliderTrackFillPointerOver" Color="{Binding Background.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/> <SolidColorBrush x:Key="SliderTrackFillPressed" Color="{Binding Background.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/> </ResourceDictionary> <ResourceDictionary x:Key="Light"> <SolidColorBrush x:Key="SliderTrackValueFillPointerOver" Color="{Binding Foreground.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/> <SolidColorBrush x:Key="SliderTrackValueFillPressed" Color="{Binding Foreground.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/> <SolidColorBrush x:Key="SliderTrackFillPointerOver" Color="{Binding Background.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/> <SolidColorBrush x:Key="SliderTrackFillPressed" Color="{Binding Background.Color, RelativeSource={RelativeSource Mode=TemplatedParent}}"/> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Style.Resources> </Style>
步骤2:简化Slider的使用
之后你在任何页面使用Slider时,只需设置Foreground和Background,不用再写Slider.Resources部分:
<Slider x:Name="mySlider" StepFrequency="0.1" Minimum="0" Maximum="8" SnapsTo="StepValues" Foreground="#b400ff" Background="#6c4080"/>
例外处理
如果某个Slider需要脱离全局样式的控制,可以给它单独设置Style="{x:Null}",或者自定义专属样式覆盖全局规则。
内容的提问来源于stack exchange,提问作者SoulFanatic
相关产品推荐
相关产品推荐

