我有这个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}}"
答案 0 :(得分:1)
恐怕您不能在不修改StringFormat
的情况下更改Style
。您可以做的就是绑定到Tag
中Slider
的{{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");
}