【问题标题】:Bind height of BoxView or Frame to (hidden) NavigationBar in Xamarin在 Xamarin 中将 BoxView 或 Frame 的高度绑定到(隐藏的)NavigationBar
【发布时间】:2019-09-05 13:19:13
【问题描述】:

我不想在主页上使用标准 NavigationBar,而是想隐藏那个并加载一个自定义的。我认为使用 BoxView (edit:) 框架是最好的方法。但是,如何将 BoxView 的高度(请求)绑定到(隐藏的)NavigationBar,最好在 Xaml 中?

(boxview的frame应该有同样的方法)

【问题讨论】:

  • 如果您使用自定义控件,有趣的是您根本不需要系统高度,因为您可以使用自己的。假设您需要 50 而不是 47。所以手动设置它。另一个不同点是,您需要知道 StatusBar 的高度和页面插图,以防无框架 ios 设备或 ios 顶部调用或调制解调器共享栏。

标签: xamarin navigationbar custom-view


【解决方案1】:

对于两个常用控件,可以像这样将一个控件的高度绑定到另一个控件上(以BoxView和Button为例):

<BoxView Color="Yellow"
         x:Name="testbox"
         WidthRequest="160"
         HeightRequest="60"
         VerticalOptions="Center"
         HorizontalOptions="Center" />

<Button Text="test..." 
        BindingContext="{x:Reference testbox}"
        WidthRequest="160"
        HeightRequest="{Binding Path=HeightRequest}"/>

更新

您可以使用自定义渲染器获取每个平台上的 NavigationBar 高度。 然后按照上面的方法将 NavigationBar 的高度绑定到 Boxview 上。

对于 Android:

public class NaviRendererForAndroid : NavigationPageRenderer
{
public CustomNaviForAndroid(Context context) : base(context)
{

}
protected override void 
OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
{
    base.OnElementChanged(e);

    var height = 0;

    Resources resources = Context.Resources;
    int resourceId = resources.GetIdentifier("navigation_bar_height", "dimen", "android");
    if (resourceId > 0)
    {
        height = resources.GetDimensionPixelSize(resourceId);
    }
  }
}

对于 IOS:

public class NaviRendererForiOS : NavigationRenderer
{
  protected override void OnElementChanged(VisualElementChangedEventArgs e)
 {
    base.OnElementChanged(e);

    var height = NavigationBar.Bounds.Height;
 }
}

【讨论】:

  • 嘿,我想我们误会了。我想让 BoxView 元素与导航栏具有相同的高度以进行自定义。我想编辑 BoxView(或框架)的高度,而不是导航栏。
  • 我已经更新了答案,你可以查看一下。希望对你有帮助。
猜你喜欢
  • 2020-08-31
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 2013-10-22
  • 1970-01-01
  • 2013-12-14
  • 2012-10-21
相关资源
最近更新 更多