从滑块定义更改SliderThumbStyle值

时间:2018-07-13 11:27:52

标签: wpf slider styles string.format

我有这个SliderThumbStyle

<Style x:Key="SliderThumbStyle" TargetType="{x:Type Thumb}">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Thumb}">
                    <Grid>
                        <Border Name="outerBorder"
                                Background="{DynamicResource ApplicationBorderBrush}"
                                BorderBrush="{DynamicResource ApplicationBorderBrush}"
                                Height="24"
                                Width="24"
                                Opacity="1" 
                                BorderThickness="2"
                                CornerRadius="10"/>
                        <TextBlock x:Name="sliderValue"
                                   FontSize="10"
                                   Foreground="Silver"
                                   Text="{Binding Value, RelativeSource={RelativeSource AncestorType=Slider}, StringFormat={}{0:N1}}"
                                   VerticalAlignment="Center"
                                   HorizontalAlignment="Center"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在我的应用程序中,我两次使用此滑块Style,但是其中一个不需要N1 StringFormat,而是N0,仅用于整数值。

我在高级定义Slider时如何选择此选项?

mm8所示,我尝试这样做:

<Slider Tag="{Binding Value, RelativeSource={RelativeSource Self}, StringFormat=N1}" />

样式:

Text="{Binding Tag, RelativeSource={RelativeSource AncestorType=Slider}}"/>

但是似乎它现在以N1格式显示值,但是1.23456789

我也尝试这样做:

Tag="{Binding Value, RelativeSource={RelativeSource Self}, StringFormat={}{0:N1}}"

1 个答案:

答案 0 :(得分:1)

恐怕您不能在不修改StringFormat的情况下更改Style。您可以做的就是绑定到TagSlider的{​​{1}}的{​​{1}}属性:

Style

...然后处理每个单独的<TextBlock x:Name="sliderValue" FontSize="10" Foreground="Silver" Text="{Binding Tag, RelativeSource={RelativeSource AncestorType=Slider}}" VerticalAlignment="Center" HorizontalAlignment="Center"/> 的{​​{1}}事件,并将ValueChanged属性设置为格式化的Slider

Tag

您可能希望将此功能包装为附加的行为:

string

样品用量:

private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    Slider slider = (Slider)sender;
    slider.Tag = slider.Value.ToString("N1");
}