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}}">