绑定到Style中HeaderTemplate内的Slider值

时间:2015-03-24 11:40:34

标签: windows xaml windows-store-apps

我为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}。但我希望Value的{​​{1}}属性显示在第二个Slider中,但我无法找到方法。我尝试使用TextBlock作为源代码,但崩溃是因为它试图在TemplatedParent类型的对象上获取Value属性。

如何将ContentPresenter的{​​{1}}属性绑定到第二个Value

1 个答案:

答案 0 :(得分:1)

HeaderTemplate只获取要使用的标题内容。它无法在Slider上看到其他属性。既然听起来像是针对特定的常量外观,那么你需要使用HeaderTemplate吗?如果您将标题嵌入到Slider的模板中,那么它可以通过RelativeSource访问Value。

右键单击Slider并选择Edit Template.Edit a Copy ...以获取Slider模板的副本。在模板中找到HeaderContentPresenter并将其替换为您的网格模板:

<!--<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。