如何将TemplateBind设置为BorderThickness.Top(或底部或左侧或右侧)?
问题描述:
我不知道是否有可能将像BorderThickness.Top这样的结构元素绑定到TemplatedParent的相应属性。我已经尝试如何将TemplateBind设置为BorderThickness.Top(或底部或左侧或右侧)?
<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,只有顶部和底部受到约束。
在此先感谢。
答
这是不可能的,因为Thickness是一个值类型 - 您只能在依赖项对象的依赖项属性上创建绑定。
你可以做什么是绑定了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指定的哪些部位要清除厚度。
答
是的,您可以直接在XAML中执行此操作,而不需要转换器。 {TemplateBinding …}
只是一个功能有限的{Binding RelativeSource={RelativeSource TemplatedParent} …}
的语法糖。
你的问题的解决方案:
<Thickness Left="0" Right="0" Top="{Binding BorderThickness.Top, RelativeSource={RelativeSource TemplatedParent}}" Bottom="{Binding BorderThickness.Bottom, RelativeSource={RelativeSource TemplatedParent}}" />
AHAA ......非常感谢你4您快速,准确的答复......我最近了解到依赖属性...我如何能忘了? – mg007 2009-09-08 16:15:44