56

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

4

7 回答 7

123

我猜这实际上会帮助你

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

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

于 2013-09-26T07:27:13.700 回答
48

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

Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}"
于 2015-07-14T12:00:13.277 回答
26

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

HorizontalAlignment="Stretch"

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

于 2016-01-23T11:37:17.193 回答
6
 Width="{Binding Width, RelativeSource={RelativeSource AncestorType={x:Type Parent}, Mode=FindAncestor}}"

如果两个控件的 DataContext 不同。

于 2018-03-28T05:49:01.317 回答
4

如果您在 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);
于 2016-12-04T12:26:29.843 回答
0

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

HorizontalOptions="Fill"
于 2021-07-20T05:57:49.700 回答
-1

在 ListBox 上使用 Horizo​​ntalContentAlignment="Stretch":

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

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

<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>
于 2018-05-29T12:30:51.967 回答