我有一个宽度为“1 *”的网格。所以我认为实际宽度是在运行时决定的。在该网格中,我有另一个网格,我想将其宽度设置为父网格的运行时宽度。我如何通过绑定在 xaml 中做到这一点。
问问题
106741 次
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
HorizontalAlignment 不适用于 Xamarin 中的按钮,您可以改用 HorizontalOptions
HorizontalOptions="Fill"
于 2021-07-20T05:57:49.700 回答
-1
在 ListBox 上使用 HorizontalContentAlignment="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 回答