如何绑定需要“自动”宽度行为的元素宽度?

时间:2010-01-26 21:19:12

标签: wpf xaml wpf-controls

我希望有一组具有相同宽度的元素,我不能简单地将它们放在网格中,因为这是一个内容控件,并且绑定的元素是未知的。

举个简单的例子,我如何将每个堆栈面板的第一个子节点的所有宽度与第二个元素绑定在一起。

  <StackPanel>
    <StackPanel Orientation="Horizontal">
      <Label Content="First column"/>
      <Label Content="Second Column" Background="Green"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal">
      <Label Content="One"/>
      <Label Content="Two" Background="Green"/>
    </StackPanel>
  </StackPanel>

2 个答案:

答案 0 :(得分:2)

我不清楚你在这里没有使用示例代码中的Grid的原因,但Grid为你提供了一个内置的机制来实现这一点:

 <StackPanel Grid.IsSharedSizeScope="True">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Col2"/>
        </Grid.ColumnDefinitions>
        <Label Content="First column" Grid.Column="0"/>
        <Label Content="Second Column" Background="Green" Grid.Column="1"/>
    </Grid>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="Col1"/>
            <ColumnDefinition SharedSizeGroup="Col2"/>
        </Grid.ColumnDefinitions>
        <Label Content="One" Grid.Column="0"/>
        <Label Content="Two" Background="Green" Grid.Column="1"/>
    </Grid>
</StackPanel>

这对您有用还是有其他限制,不允许您这样做?

答案 1 :(得分:0)

    <StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label x:Name="FirstColumnLabel" Content="First column"/>
            <Label x:Name="SecondColumnLabel" Content="Second Column" Background="Green"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <Label Content="One" Width="{Binding ElementName=FirstColumnLabel, Path=ActualWidth}"/>
            <Label Content="Two" Width="{Binding ElementName=SecondColumnLabel, Path=ActualWidth}" Background="Green"/>
        </StackPanel>
    </StackPanel>