我想知道是否可以将诸如BorderThickness.Top之类的结构元素绑定(bind)到TemplatedParent的相应属性。我试过了

<Border Margin="0" Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}">
    <Border.BorderThickness>
        <Thickness Left="0" Right="0" Top="{TemplateBinding BorderThickness.Top}" Bottom="{TemplateBinding BorderThickness.Bottom}"/>
    </Border.BorderThickness>
</Border>

我要执行此操作的原因是我希望“左”和“右”为0,并且仅绑定(bind)“上”和“下”。

提前致谢。

最佳答案

这是不可能的,因为“厚度”是一种值类型-您只能在依赖项对象的依赖项属性上创建绑定(bind)。

您可以做的是像平常一样绑定(bind)BorderThickness:

<Border Margin="0"
        Padding="{TemplateBinding Padding}"
        BorderBrush="{TemplateBinding BorderBrush}"
        BorderThickness="{TemplateBinding BorderThickness, Converter={StaticResource ThicknessConverter}}" />

然后使用转换器返回经过适当修改的“厚度”:
object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
    var thickness = (Thickness) value;
    return new Thickness( 0.0, thickness.Top, 0.0, thickness.Bottom );
}

您甚至可以使用ConverterParameter指定要清除的厚度部分。

10-07 16:21