我的WPF Style Setter可以使用TemplateBinding吗?

我正在做这样的事情

<Style
    x:Key="MyBorderStyle"
    TargetType="Border">
    <Setter
        Property="BorderBrush"
        Value="{StaticResource MyBorderBrush}" />
    <Setter
        Property="Background"
        Value="{StaticResource MyBackgroundBrush}" />
    <Setter
        Property="Padding"
        Value="{TemplateBinding Padding}" />
</Style>

…但是我收到错误:’padding’成员无效,因为它没有合格的类型名称.

如何提供“合格类型名称”?

注意:我试图这样做的原因是,我想在一系列类似的ControlTemplates中包含相同的边框.

谢谢.

编辑:

我试过这个

<Setter
    Property="Padding"
    Value="{TemplateBinding GridViewColumnHeader.Padding}" />

…它实际编译,但是当我运行应用程序,我得到一个XamlParseException:

无法将属性“Value”中的值转换为类型“”的对象.

我认为可能会使用GridViewColumnHeader(这是我想要使用这种风格的ControlTemplate)的合格填充工作,但没有骰子.

编辑2:

那么,根据TemplateBinding的文档,它说:

Links the value of a property in a control template to be the value of some other exposed property on the templated control.

所以听起来好像我想要做的只是简单的不可能.我真的希望能够在控件模板中为某些控件创建可重用的样式,但我猜这些样式中不能包含模板绑定.

这对于您模板化控件并且要将该控件的属性的值绑定到模板中不同控件的属性的情况下应该起作用.在你的情况下,你是模板化的东西(称为MyControl),该模板将包含一个边界,其Padding应绑定到MyControl的填充.

MSDN documentation

A TemplateBinding is an optimized form of a Binding for template scenarios, analogous to a Binding constructed with {Binding RelativeSource={RelativeSource TemplatedParent}}.

无论什么原因,指定TemplatedParent作为绑定的源在“样式集”中似乎不起作用.为了解决这个问题,你可以指定相对父级是你正在模板化的控件的AncestorType(有效地找到了TemplatedParent,提供你没有在MyControl模板中嵌入其他MyControls).

当我尝试自定义模板一个Button控件时,我使用这个解决方案,其中Button的(String)内容需要绑定到ControlTemplate中的TextBlock的Text属性的按钮.这是代码如下所示:

<StackPanel>
    <StackPanel.Resources>
        <ControlTemplate x:Key="BarButton" TargetType="{x:Type Button}">
            <ControlTemplate.Resources>
                <Style TargetType="TextBlock" x:Key="ButtonLabel">
                    <Setter Property="Text" Value="{Binding Path=Content, RelativeSource={RelativeSource AncestorType={x:Type Button}} }" />
                </Style>
            </ControlTemplate.Resources>
            <Grid>
                <!-- Other controls here -->
                <TextBlock Name="LabelText" Style="{StaticResource ButtonLabel}" />
            </Grid>
        </ControlTemplate>
    </StackPanel.Resources>
    <Button Width="100" Content="Label Text Here" Template="{StaticResource BarButton}" />
</StackPanel>
相关文章
相关标签/搜索