我有一个宽度为“1 *”的网格。所以我认为在运行时确定实际宽度。 在该网格中,我有另一个网格,其宽度我想设置为父网格的运行时宽度。我怎么能通过绑定在xaml中做到这一点。
答案 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)
HorizontalAlignment 不适用于 Xamarin 中的按钮,您可以改用 HorizontalOptions
HorizontalOptions="Fill"