gpt4 book ai didi

c# - 如何在同一页面上使用 Xamarin.Form 控件和 native 控件

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:09 24 4
gpt4 key购买 nike

我想在我的原生 Android 页面控件中使用 Xamarin.Form 控件。在我的 Android native 页面中,有什么方法可以在我的 native Android fragment 或 LinearLayout 中加载 Xamarin.Form 页面?

根据 Xamarin这是可能的。但我找不到如何实现这一目标。

http://xamarin.com/forms

最佳答案

有几件事正在讨论中,所以请耐心等待:

图片 fragment ,据我了解:

 "Not only are Xamarin.Forms pages mixable with custom screens" ...

这就像@Stephane 提到的允许应用程序使用 native 屏幕以及作为Xamarin.Forms 屏幕。每个平台 stub-page 都可以在应用程序的任何位置引入一个共享的Xamarin.Forms 页面。您不必使用 Xamarin.Forms Navigation Stack

 "but you can embed custom views built directly against Xamarin.IOS and Xamarin.Android into Xamarin.Forms pages."

这就是@Sten 提到的内容,如果您创建特定平台 ContentRenderers,您可以呈现任何类型的 native 控件 进入现有的 Xamarin.Forms 页面,方法是将此通用View 传递给每个平台渲染器。

因此,例如,如果您有一个 View :-

 public class MyView : ContentView
{
// Create some bindable properties here that can be used in your platform specific renderer,
// i.e. DisplayText etc.
}

您可以在 Xamarin.Forms 页面定义中使用上述内容,然后创建特定于平台的呈现器,将被调用以呈现内容 .

正是在这些特定于平台的内容呈现器类中,您可以在每个平台上使用本地控件

例如,在 ContentRenderer 中,对于 OnElementChanged 事件,您可以为 WindowsPhone 执行以下操作:-

 protected override void OnElementChanged(Xamarin.Forms.Platform.WinPhone.ElementChangedEventArgs<MyView> e)
{
base.onElementChanged(e);
...
System.Windows.Controls.TextBox objPlatformSpecificTextBox = new System.Windows.Controls.TextBox();
...
...

但是,我相信@Gulshan 真正想要的是拥有一个 native 页面,它是中心舞台,带有Xamarin.Forms已经存在的 native 页面呈现到特定点的内容。

它有点颠倒,在思想上,但这仍然是可能的:-

要实现这一点,您需要将页面生成到临时新页面

例如,在 WindowsPhone 中,您可以通过以下方式执行此操作:-

        PhoneApplicationPage objInnerPage_Temp = new PhoneApplicationPage();
UIElement objInnerContent = App.GetMainPage().ConvertPageToUIElement(objInnerPage_Temp);

特定于平台的 stub 页面

然后您可以将呈现的内容注入(inject)到适合平台的本地容器,即网格

更新 1:-

==========

虽然在 WindowsPhone 上很容易做到这一点,但不幸的是,在 Android 中尝试类似的事情时似乎不可能。

Android 页面创建非常锁定,即您无法访问 Canvas <的私有(private)字段/strong> 和/或它在 AndroidActivity 内部使用的 layout

如果这是可能的,那么您可以重复使用它并获取呈现的内容并注入(inject),类似于WindowsPhone 平台的解决方案。

此外,Platform 类也被标记为internal,防止以另一种方式生成呈现的内容。

我曾希望通过 Fragment 实现生成一个 Activity 来解决这个问题,这很有效 - 但是 - 这里的问题是 Xamarin.Forms 中的实现期望 ActionBar 可用,但它不可用,并且它们不检查 if null 允许执行在不可用时继续执行的场景,因此它会抛出阻止页面内容生成的异常。

因此看起来不可能?除非他们在 AndroidActivity 中打开布局/ Canvas 字段或解决 ActionBar 预期问题。

关于c# - 如何在同一页面上使用 Xamarin.Form 控件和 native 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25685014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com