Xaml 表单将网格的高度绑定到按钮的宽度

Xaml 表单将网格的高度绑定到按钮的宽度,xaml,data-binding,xamarin.forms,Xaml,Data Binding,Xamarin.forms,我尝试使用Xamarin.Forms构建以下UI元素。通过将TopGrid的Height属性绑定到Button1的ActualWidth属性,我可以用UWP构建这个。但是,这在Xamarin.Forms中不起作用,因为没有ActualWidth属性。我已经尝试将TopGrid的高度绑定到宽度请求,但没有成功 有没有人有使用Xamarin.Forms的经验,可以帮我解决这个问题?首先,Xaml名称区分大小写,所以 BindingContext=“{x:Reference Name=butto

我尝试使用
Xamarin.Forms
构建以下UI元素。通过将
TopGrid
Height
属性绑定到
Button1
ActualWidth
属性,我可以用
UWP
构建这个。但是,这在Xamarin.Forms中不起作用,因为没有
ActualWidth
属性。我已经尝试将
TopGrid
高度
绑定到
宽度请求
,但没有成功



有没有人有使用
Xamarin.Forms
的经验,可以帮我解决这个问题?

首先,Xaml名称区分大小写,所以

BindingContext=“{x:Reference Name=button1}”
这应该是

BindingContext=“{x:Reference Name=Button1}”
除此之外,您的Xaml几乎还可以。让我们看看

Height=“{Binding Path=WidthRequest}”
您试图绑定到视图的高度,但
HeightProperty
是只读的BindableProperty,因此无法设置它。如果您查看API,也没有
Height
属性的公共setter。因此,与其绑定到Height,不如绑定到HeightRequest

HeightRequest=“{Binding Path=WidthRequest}”
这是一种表示您希望
网格
达到该高度的方式,布局系统将尽最大努力让您满意(但这只是一种最大的努力)

我想你现在明白了。按钮
WidthRequest
是用户发出的请求,在这种情况下,它没有设置,其值保留为默认值。相反,您希望使用按钮的实际宽度作为绑定的源属性。让我们开始吧:

HeightRequest=“{Binding Width}”
这就给出了预期的结果:

下面是经过完整更正的Xaml片段:


如果您不想为整个网格(以及其中的每个项目)设置BindingContext,那么您可以直接在绑定中指定它,如下所示,允许所有其他控件保留其原始BindingContext:

 <Grid x:Name="TopGrid" Grid.Row="0" HeightRequest="{Binding Width, Source={x:Reference Button1}}">

 <Grid x:Name="TopGrid" Grid.Row="0" HeightRequest="{Binding Width, Source={x:Reference Button1}}">