如何在Silverlight中将子元素的宽度绑定到父元素的宽度

时间:2013-09-18 05:55:54

标签: wpf xaml binding silverlight-4.0 width

我有一个宽度为“1 *”的网格。所以我认为在运行时确定实际宽度。 在该网格中,我有另一个网格,其宽度我想设置为父网格的运行时宽度。我怎么能通过绑定在xaml中做到这一点。

7 个答案:

答案 0 :(得分:101)

这实际上对我有帮助

Width="{Binding ActualWidth, ElementName=parentElementName}"

这会将宽度绑定到父元素或提供的元素名称

答案 1 :(得分:28)

这是可以在任何地方使用的通用解决方案。您不需要编写父元素名称。这将识别其父级并将采用父级的宽度。

Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}"

答案 2 :(得分:19)

我认为做同样事情的最简单方法是:

HorizontalAlignment="Stretch"

这并没有像你被问到的那样使用绑定,但它更容易。

答案 3 :(得分:3)

如果你在CodeBehind中这样做,这对我有用。它还有一个额外的好处,即bindMe不一定是toMe的孩子:

public static void BindWidth(this FrameworkElement bindMe, FrameworkElement toMe)
{
  Binding b = new Binding();
  b.Mode = BindingMode.OneWay;
  b.Source = toMe.ActualWidth;
  bindMe.SetBinding(FrameworkElement.WidthProperty, b);
}

用法:

child.BindWidth(parent);

答案 4 :(得分:2)

 Width="{Binding Width, RelativeSource={RelativeSource AncestorType={x:Type Parent}, Mode=FindAncestor}}"

如果两个控件DataContext都不同。

答案 5 :(得分:0)

如果它在模板内,请使用:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <Image Width="{TemplateBinding Width}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Source="TestImage.png"/>
                <TextBlock HorizontalAlignment="Center" Text="Test Text"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

答案 6 :(得分:0)

Horizo​​ntalAlignment 不适用于 Xamarin 中的按钮,您可以改用 Horizo​​ntalOptions

HorizontalOptions="Fill"