我想写一个Xamarin Page
类,模仿Pivot
控件,该控件在Windows Phone上由TabbedPage
使用,但在Windows桌面上不可用。因此,我想让它拥有几个子女Page
s,其中只有一个会在同一时间显示,同时还有一个控制它自己的控件,允许用户在孩子之间切换。我将如何去做这件事?如何创建一个可以托管其他页面的Xamarin页面?
0
A
回答
0
你正在寻找CarouselView
。它在上使用FlipView
WinRT和UWP平台。
你可以从Xamarin blog和Xamarinhelp.com找到更多的信息。他们还有预发布nuget包。
0
我想你必须自己写。使用CarouselView,将它添加到Grid或AbsoluteLayout或RelativeLayout(我的意思是,将它放在背景上,这样您就可以在其上添加标题的旋转木马,或者您可能不想那样做,在这种情况下,您只需使用垂直堆栈布局)。您还需要为导航添加自定义控件,并同步页面标题轮播和实际页面轮播之间的更改。
0
我发现this blog post关于如何在视图中托管页面。在此基础上,我提出了以下观点类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace SGB
{
public class PageView : View
{
public PageView()
{
}
public static readonly BindableProperty ContentProperty = BindableProperty.Create<PageView,Page> (s => s.Content, null);
public Page Content {
get
{
return (Page)GetValue (ContentProperty);
}
set
{
SetValue (ContentProperty, value);
LayoutContent();
}
}
protected override void OnSizeAllocated(double width, double height)
{
base.OnSizeAllocated(width, height);
LayoutContent();
}
private void LayoutContent()
{
if (Content != null)
{
Content.Layout(new Rectangle(0, 0, Width, Height));
}
}
}
}
与此渲染器类:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Xamarin.Forms;
using Xamarin.Forms.Platform.WinRT;
using Page = Xamarin.Forms.Page;
using SGB;
[assembly: ExportRenderer(typeof(PageView), typeof(SGB.Windows.PageViewRenderer))]
namespace SGB.Windows
{
public class PageViewRenderer : ViewRenderer<PageView, FrameworkElement>
{
private Page currentPage;
private FrameworkElement FrameworkElement;
public PageViewRenderer()
: base()
{
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if ((e.PropertyName == "Content") || (e.PropertyName == "Renderer"))
{
SetPage(((PageView)Element).Content);
}
}
private void SetPage(Page page)
{
if (page == currentPage)
{
return;
}
if (currentPage != null)
{
((IPageController)page).SendDisappearing();
currentPage.Parent = null;
}
currentPage = page;
if (page != null)
{
var renderer = page.GetOrCreateRenderer();
FrameworkElement = renderer.ContainerElement;
SetNativeControl(FrameworkElement);
page.Parent = FindPage();
((IPageController)page).SendAppearing();
}
}
private Page FindPage()
{
for (Element element = Element; element != null; element = element.Parent)
{
if (element is Page)
{
return (Page)element;
}
}
return null;
}
}
}
现在我有,我可以创建一个包含PageView
一个ContentPage
,我有我想要的。
相关问题
- 1. 如何从iframe页面与其托管页面进行通信?
- 2. Firebase托管,创建404页面
- 3. 如何将值从一个页面传递给其他页面?
- 4. 使用codeigniter创建链接到主页面的其他页面
- 5. 单个PHP页面托管
- 6. 托管WebMatrix页面
- 7. 管理员控制器的一个404页面和其他控制器的其他404页面如何?
- 8. 如何跟踪引荐页面以创建其他链接?
- 9. 如何创建两个页面,以便一个页面显示输入到另一个页面的内容?
- 10. 如何在MVC中创建页面并与其他页面链接
- 11. 如何在aspx c#页面中创建另一个页面类
- 12. 创建views.py管理页面
- 13. 让域名托管在另一个域上托管的页面
- 14. 删除另一个页面的css,并保留其他页面
- 15. 如何在其他多个页面上添加页面部分?
- 16. Xamarin - 如何创建一个共享页面,我可以将其包含到非共享项目中的GridView中?
- 17. 在html中区分一个页面和其他页面
- 18. Grails在其他页面渲染页面
- 19. 从其他页面访问页面类
- 20. Asp.net页面崩溃其他asp页面
- 21. 托管登陆页面通过平台/其他
- 22. 本地托管页面
- 23. 从jsf页面或托管bean页面导航到上一页面
- 24. 创建MVVM搜索页面Xamarin
- 25. 如何创建一个主设计页面,然后所有其他页面使用该主设计
- 26. 如何用按钮创建一个cgi页面发布到另一个页面
- 27. 如何在C#中创建一个页面来响应另一个页面?
- 28. 如何将信息从一个jsp页面传递到其他jsp页面
- 29. 如何将javascript变量从一个html页面传递到其他html页面
- 30. 如何在Android中将值从一个页面传递给其他页面?
CarouselView托管视图,而不是页面。 – Simon