2009-09-08 37 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}}" /> 
相關問題