从其模板访问元素属性值

时间:2014-06-10 16:13:54

标签: c# wpf xaml

我在xaml中定义了一个组合框:

<ComboBox Width="100"/>

这个ComboBox,以及我拥有的所有其他组合框,都是用ControlTemplate设计的,我复制并编辑了一些颜色等等。

<ControlTemplate TargetType="{x:Type ComboBox}">....

在此控件模板中,如何从上面的元素中访问Width属性的值?

例如:

<ControlTemplate TargetType="{x:Type ComboBox}">
     <Grid Width="??{Binding WidthValue}??" >....

{Binding WidthValue}为100,从宽度=“100”以上。

2 个答案:

答案 0 :(得分:1)

<Grid Width="{TemplateBinding Width}">

P.S。您经常会在默认控件模板中看到这用于PaddingMarginSnapsToDevicePixels

等属性的控件

答案 1 :(得分:0)

您可以使用TemplatedParent绑定

<Grid Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Width}">

但是你不应该Grid应该伸展,所以如果你将ComboBox限制为100,你应该自动限制Grid里面

编辑

如果你需要绑定到宽度,那么我建议绑定到ActualWidth而不是Width

<Grid Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}">

因为Width不需要在使用此模板的所有控件中定义