我的部分中有一个模板。我想将该模板中某个值的宽度绑定到我的主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
答案 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}"