我为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
?
答案 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。