将ContentPresenter.Content绑定到TemplatedParent(WPF / Silverlight)

时间:2012-11-08 00:18:46

标签: wpf silverlight binding controltemplate contentpresenter

基本上,我想使用TextBlock覆盖Button,使用ControlTemplate(适用于此Button),但我不想覆盖<Grid Grid.Row="1" Grid.ColumnSpan="2"> <Grid.Resources> <Style x:Key="myStyle" TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid> <ContentPresenter /> <TextBlock Text="textBlock" Margin="10" Foreground="Red"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </Grid.Resources> <Button Style="{StaticResource myStyle}" Content="button1"></Button> </Grid> 。我想摆脱它的默认模板。

示例:

Button

并且ControlTemplate删除了它的默认模板:

enter image description here

相反,我想收到这样的内容:

enter image description here

是否可以使用TemplatedParent?我试图将ContentPresenter.Content绑定到<ContentPresenter Content="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=., Mode=TwoWay}"/> ,就像这里:

TextBlock

或其他组合,但我无法使其发挥作用。

修改

因为我希望能够将此Control不仅应用于按钮(仅作为示例),而且应用于任何Control,我不希望通过复制每个UserControl的默认样式(对于资源或某处)。 另外,我不想创建TextBlock,因为我希望尽可能地保持xaml清洁(我的意思是系统控件) - 并且只是通过使用来打开/关闭覆盖的ControlTemplate {{1}}。

1 个答案:

答案 0 :(得分:1)

您可以在按钮上添加default style并修改它以添加TextBlock。第二个选项,我的偏好是创建一个新的UserControl,其中包含ButtonTextBlock IsHitTestVisible=False。然后,您可以添加依赖项属性,以便能够绑定到按钮和文本块。