WPF数据绑定 - 从模板绑定到UI控件

时间:2009-12-04 17:40:14

标签: wpf data-binding binding

我的部分中有一个模板。我想将该模板中某个值的宽度绑定到我的主XAML部分中控件的宽度。

可以这样做吗? Expression Blend仅在“绑定”列表中显示“模板”。

例如,这就是我想要的工作:

<Windows.Resources>
... My template stuff
   <Grid.ColumnDefinitions>
      <ColumnDefinition Width="20" />
      <ColumnDefinition Width="50" />
      <ColumnDefinition Width="{Binding ElementName=SecondColumn, Path=Width}"/>
      <ColumnDefinition Width="30" />
   </Grid.ColumnDefinitions>
... More template stuff
</Windwos.Resources>

<Grid Name="MainGrid">
   <Grid.ColumnDefinitions>
      <ColumnDefinition Name="FirstColumn" Width=".25*" />
      <ColumnDefinition Name="SecondColumn" Width=".5*" />
      <ColumnDefinition Name="ThirdColumn"  Width=".25*" />
   </Grid.ColumnDefinitions>
... Rest of my XAML

2 个答案:

答案 0 :(得分:1)

您的意思是您希望您的列始终具有相同的宽度,或者您是否意味着首先它们的宽度相同?如果是这样,为什么不定义一个样式并从两个列中使用它?

答案 1 :(得分:1)

一旦进入模板,你就会与其他元素隔离(有充分的理由 - 它可以在其他地方重复使用)。在这种情况下(假设模板在“MainGrid”下的某处使用),看起来你可以使用RelativeSource FindAncestor Binding来定位父Grid(你需要确保计算VisualTree中的网格以获得正确的AncestorLevel) - 在这里只是代码,它将是2)。 Path将是ColumnDefinitions [1] .Width。请记住,这取决于您维护使用模板的元素的结构,因此它有点脆弱。还有一种使用SharedSizeGroup的替代方法,可以在不同级别连接网格行或列,但仅适用于自动和固定像素大小。此Binding方法适用于fixed和* sizes。

整个装订:

Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}, AncestorLevel=2}, Path=ColumnDefinitions[1].Width}"
相关问题