在 Style 中绑定到 HeaderTemplate 内的 Slider 值

Binding to Slider value inside HeaderTemplate in Style

我为 Slider 制作了一个样式,我在其中自定义了 HeaderTemplate,如下所示:

<Style TargetType="Slider">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding}" Grid.Column="0" />
                    <TextBlock Text="{Binding Path=Value}" Grid.Column="1" />
                </Grid>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

Header-属性 的绑定工作正常并显示在 TextBlock{Binding} 中。但是我希望 SliderValue 属性 出现在第二个 TextBlock 中,但我找不到办法做到这一点。我曾尝试使用 TemplatedParent 作为源,但它崩溃了,因为它试图在 ContentPresenter 类型的对象上获取 Value 属性。

如何将 SliderValue 属性 绑定到第二个 TextBlock

HeaderTemplate 仅获取要使用的 Header 的内容。它看不到 Slider 上的其他属性。由于听起来您的目标是特定的恒定外观,因此您需要使用 HeaderTemplate 吗?如果您将页眉嵌入到滑块的模板中,那么它可以通过 RelativeSource 访问值。

右键单击滑块并选择编辑 Template.Edit 复制...以获取滑块模板的副本。在模板中找到 HeaderContentPresenter 并将其替换为您的 Grid 模板:

<!--<ContentPresenter x:Name="HeaderContentPresenter" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}"  Foreground="{ThemeResource SliderHeaderForegroundThemeBrush}" FontWeight="{ThemeResource SliderHeaderThemeFontWeight}" Margin="{ThemeResource SliderHeaderThemeMargin}"/>-->

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Header}" Grid.Column="0" />
    <TextBlock Text="{Binding  RelativeSource={RelativeSource TemplatedParent}, Path=Value}"  Grid.Column="1"/>
</Grid>

如果您想进一步自定义页眉,您可以使用 ContentPresenter 而不是 Path=Header TextBlock。