2012-07-29 47 views
0

如果我有一個控件模板定義:爲什麼ControlTemplate中的某些屬性不符合要求?

<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}"> 
<Border BorderBrush="Orange" BorderThickness="3" CornerRadius="2" 
Background="Red" TextBlock.Foreground="White"> 
<ContentPresenter RecognizesAccessKey="True" Margin="{TemplateBinding Padding}"/> 
</Border> 
</ControlTemplate> 

,我把它綁定到一個按鈕控制

<WrapPanel> 
<Button Margin="10" Padding="5" Template="{StaticResource ButtonTemplate}">Test</Button> 
</WrapPanel> 

爲什麼是填充=「5」不兌現,除非我包括TemplateBinding標記擴展?還有哪些其他屬性會被忽略,以及在什麼情況下,或者如何確定它們是否會被忽略或尊重?

此外,出於好奇,不是你會但可以用一個正常的數據綁定表達式替換一個模板綁定,並讓它仍然工作? (如果是的話,這條路是什麼?)我仍然在學習WPF,只是想深入瞭解一些機制

回答

1

爲什麼Padding =「5」 TemplateBinding標記擴展?

這只是WPF是如何工作的,它是如何使用的一些屬性的模板控件,有沒有辦法讓系統可以洞察到其中的模板Padding需求來爲它有意義概念所以你需要手動綁定它。其中你應該綁定MarginBackground

一個正常的結合看起來是這樣的:

Margin="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}}" 
0

你好,這是因爲依賴項屬性的功能的情況發生。依賴屬性根據優先級獲取其值,如下所示1)活動或動畫2)本地(即內聯)值3)模板值4)樣式值5)默認值。現在在上面你爲兩者(本地和模板)設置了保證金值,但本地值具有更高的優先級,因此應用此值。這是爲什麼會發生,所以我希望這會有所幫助。

+0

優先順序與此無關。 – 2012-07-29 04:43:46

+0

是的,我的錯誤我誤解了這個問題。 – ethicallogics 2012-07-29 07:31:43

相關問題