xamarin - 在 Xamarin 表单中的堆栈布局中加载 Xaml

标签 xamarin xamarin.forms xamarin-studio

我有一个 Xamarin 表单的内容 View ,其中有 2 个 StackLayout 水平对齐。我想动态更改第二个 Stacklayout 的内容,但在这种情况下我不想使用主详细信息页面。请找到附件以查看我的 UI 的外观。我想在 StackLayout 1 中单击按钮时在 StackLayout 2 中加载不同的页面。

更新:我想使用 MVVM 实现上述目标。

enter image description here

最佳答案

您明确表示要在 Stacklayout2 中加载不同的页面。 开箱即用,这是不可能的。页面不能嵌套在 Xamarin.Forms 中的另一个 View 中*

但是,您很可能也不需要嵌套整个页面,这是个好消息。

您可以将自定义 xaml View 创建为单独的 xaml 文件,然后像常规控件一样引用它们。例如,您将创建一个 xaml 文件 MyDataView,您可以在其中使用一个并用不同的标签、条目和其他内容填充它,然后像添加任何其他控件一样在您的页面中实例化并添加该 MyDataView。

对于您的主机页面,我建议您将 StackLayout2 更改为 ContentView,因为它只会包含一个 View ,如果上面的自定义“MyDataView”之类的东西,它实际上会包含堆栈布局和所有详情。

从页面的角度来看,它的左侧布局包含所有按钮,右侧的“容器”用于承载不同的复杂 View 。所以那里不需要堆栈布局。

您还需要做出一个重要的决定,即何时以及如何实例化您将在右 Pane 中托管的所有 View 。

如果没有太多,您可以选择在加载页面时一次实例化它们。然后在页面使用期间切换到每一个应该非常快。像这样:

public partial class MainPage
    {
        private MyDataView myDataView = new myDataView();
        private OtherView otherView = new OtherView();
        private ThirdView thirdView = new ThirdView();


        public void OnSomeButtonClick(object sender, EventArgs e)
        {
            Container.View = myDataView;  //Container would be the x:Name you gave to your ContentView control on the right side of the page that will host the different views
        }
    }

或者您可能更喜欢“惰性”实例化 View ,这只会在第一次导航到 View 时实例化 View 。如果某些 View 实际上永远不会被访问,这将很有用,并且您可以通过在需要时才加载 View 来节省一些 cpu 周期和内存。缺点当然是当你第一次加载它时,它会加载得更慢。像这样:

public partial class MainPage
    {
        private MyDataView myDataView;
        private OtherView otherView;
        private ThirdView thirdView;


        public void OnSomeButtonClick(object sender, EventArgs e)
        {
            if (myDataView == null) myDataView = new MyDataView();
            Container.View = myDataView;  //Container would be the x:Name you gave to your ContentView control on the right side of the page that will host the different views
        }
    }

最后,您可以在每次需要时实例化 View 。在大多数情况下,我不会选择这条路线。除非你真的特别需要每次都重新创建整个 View (比如你在使用过程中动态更改它,并且在再次显示时需要重置它)


*我在 github 上看到一个自定义渲染器实现将整个页面嵌套在一个 View 中。我没有测试它,因为它当时还没有完全实现。

关于xamarin - 在 Xamarin 表单中的堆栈布局中加载 Xaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37179935/

相关文章:

c# - Xamarin 支持 Apple TLS(不是 Mono TLS)的 SNI?

xamarin - 如何隐藏或最小化 Xamarin 应用程序

xamarin - 如何在 Visual Studio 2015 中更新 Xamarin 项目模板(nuget 版本)

xaml - Xamarin 在 Xaml 中形成 OnPlatform

c# - Xamarin Studio 未启动 iOS 项目。错误 MT1108 : Could not find developer tools for this 10. 0.2 设备

android - 如何防止 Android 应用程序在使用 Xamarin Studio 部署期间被卸载?

ios - 我们应该在 Xamarin.iOS 中调用 NSDate 的 dispose 方法吗

c# - 隐藏 SuperSU 和 Kingo Root

带有长文本的 Xamarin.Forms ScrollView

java - 无法从源类型转换为目标类型 (JNIEnv.GetArray<Java.Lang.Object>(pudis.Handle);)