【问题标题】:Xamarin Forms - Xaml Element injected to every pageXamarin Forms - Xaml 元素注入到每个页面
【发布时间】:2023-01-31 23:01:04
【问题描述】:

我正在寻找一种在使用 Xamarin Forms Shell 时将元素 (DXPopup) 注入每个页面的方法。

我最初的想法是为 Tabbar 创建一个自定义渲染器并在 tabbar 上方注入弹出窗口。但是,当我的选项卡包含在 FlyoutItem 中时,我遇到了障碍。然后我想到了一个自定义的 ContentView 渲染器并添加了一个子元素,尽管在 Android 想要一个 android 视图的地方遇到了一个拦截器。

如何最好地解决这个问题?

期望的结果:DXpopup 元素添加到每个页面,因此我们可以调用一个通用的显示方法(通过中介类的消息)

【问题讨论】:

  • 创建自己的底页
  • 谢谢杰森,这是我没有涵盖的另一个选择。你能举个例子作为答案吗?如果有效,很高兴将您的回复标记为答案

标签: android ios xamarin.forms devexpress xamarin.forms.shell


【解决方案1】:

我使用上面 Jason 建议的路线解决了这个问题:

Basepage - 有一个控制模板 控制模板如:

<ControlTemplate x:Key="BasePageTemplate">
        <StackLayout VerticalOptions="FillAndExpand">
            //your element (in my case a DXPopup
            <ContentPresenter VerticalOptions="FillAndExpand"/>
        </StackLayout>
</ControlTemplate>

注册到绑定上下文更改(在基页的代码后面): BindingContextChanged += SetBindingContext;

这是为了更新到消费页面视图模型。

所述 viewmodel 将有一个 baseViewmodel,我在其中注册了注入的元素,如下所示:

private void SetBindingContext(object sender, EventArgs e)
    {
        if (BindingContext is not ViewModelBase baseVM) return;

        var dxPopUp = GetTemplateChild("ElementName");
        baseVM.DxPopUp = dxPopUp as DXPopup;
    }

这反过来又允许我使用视图模型基础与元素交互(在我的例子中显示它)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多