2

基本上,我想覆盖,例如:TextBlockover Button,通过使用ControlTemplate(应用于 this 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吗?我试图绑定TemplatedParentContentPresenter.Content这里:

<ContentPresenter Content="{Binding 
        RelativeSource={RelativeSource Mode=TemplatedParent},
        Path=., 
        Mode=TwoWay}"/>  

或其他组合,但我无法使其工作。

编辑:

因为我希望不仅可以将其应用于TextBlock按钮(这只是一个示例),而且可以应用于Control任何Control. 另外,我不想创建UserControl,因为我想尽可能保持 xaml 干净(我的意思是使用系统控件) - 并且只是TextBlock通过使用ControlTemplate.

4

1 回答 1

1

您可以在按钮上添加默认样式并对其进行修改以添加您的TextBlock. 第二个选项,我的偏好,是创建一个新的 UserControl ,它将包含 theButtonTextBlockwith IsHitTestVisible=False。然后,您可以添加依赖属性,以便能够绑定到按钮和文本块。

于 2012-11-08T01:13:50.043 回答