2009-09-08 82 views
7

我不知道是否有可能将像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,只有顶部和底部受到约束。

在此先感谢。

回答

13

这是不可能的,因为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指定的哪些部位要清除厚度。

+0

AHAA ......非常感谢你4您快速,准确的答复......我最近了解到依赖属性...我如何能忘了? – mg007 2009-09-08 16:15:44

0

是的,您可以直接在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}}" /> 
相关问题