OxyPlot 无法在 Xamarin Forms UWP 中呈现

Posted

技术标签:

【中文标题】OxyPlot 无法在 Xamarin Forms UWP 中呈现【英文标题】:OxyPlot fails to render in Xamarin Forms UWP 【发布时间】:2017-11-24 09:44:19 【问题描述】:

在this 简单示例之后,我只是在尝试将 OxyPlot 嵌入 Xamarin Forms Sample 应用程序中。我创建了一个全新的 Xamarin Forms 应用程序,添加了 Nuget 包,并在每个项目中添加了 OxyPlot 所需的初始化代码。 然后,在我的 MainPage.xaml 中有:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:oxy="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms"
             xmlns:local="clr-namespace:OxyPlotTestApp"
             x:Class="OxyPlotTestApp.MainPage">

    <AbsoluteLayout>
        <oxy:PlotView Model="Binding PieModel" AbsoluteLayout.LayoutBounds="20,0,.9,.9" 
                      AbsoluteLayout.LayoutFlags="WidthProportional,HeightProportional" />
    </AbsoluteLayout>

</ContentPage>

在代码隐藏中:

using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Series;
using OxyPlot.Xamarin.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace OxyPlotTestApp

    public class PieViewModel
    
        public PlotModel PieModel  get; set; 

        public PieViewModel()
        
            PieModel = CreatePieChart();

        

        private PlotModel CreatePieChart()
        
            var model = new PlotModel  Title = "World Population By Content" ;
            var ps = new PieSeries
            
                StrokeThickness = .25,
                InsideLabelPosition = 0.25,
                AngleSpan = 360,
                StartAngle = 0
            ;
            ps.Slices.Add(new PieSlice("Africa", 1030)  IsExploded = false );
            ps.Slices.Add(new PieSlice("Americas", 929)  IsExploded = false );
            ps.Slices.Add(new PieSlice("Asia", 4157));
            ps.Slices.Add(new PieSlice("Europe", 739)  IsExploded = false );
            ps.Slices.Add(new PieSlice("Oceania", 35)  IsExploded = false );
            model.Series.Add(ps);
            return model;
        

    
    public partial class MainPage : ContentPage
    
        public PieViewModel vm  get; set; 
        public MainPage()
        
            InitializeComponent();
            vm = new PieViewModel();
            this.BindingContext = vm;
        

    

我不确定我错过了什么,如果有的话,但我已经尝试过 UWP 项目和 android 项目(后者在物理设备上)并且它在 Android 上很好,但 UWP 应用程序只是呈现一个空白页面。

我的 UWP App.xaml.cs(相关部分):

if (rootFrame == null)
            
                // Create a Frame to act as the navigation context and navigate to the first page
                rootFrame = new Frame();

                rootFrame.NavigationFailed += OnNavigationFailed;

                OxyPlot.Xamarin.Forms.Platform.UWP.PlotViewRenderer.Init();

                Xamarin.Forms.Forms.Init(e);

谢谢...

编辑:

我刚刚创建了一个新的测试项目并获得了完全相同的结果,因此它不是针对我的项目或机器...

【问题讨论】:

【参考方案1】:

我遇到了与您提到的相同的问题,PieChart 在 Android 上工作,但在 UWP 上却没有 Xamarin.Forms (3.1.0.697729)。 我终于通过从here 安装最新版本的 OxyPlot.Xamarin.Forms 而不是 1.0.0 使其在 UWP 上运行。它适用于饼图,我没有测试其他图。

此外,Oxyplot 文档here 说“必须设置 VerticalOptions 和 Horizo​​ntalOptions 属性”,但您还需要设置 HeightRequest 和 WidthRequest。我在post 中读到了这一点,但与这篇文章相反,它在我的 StackLayout 中运行良好。 这个问题很老,但我希望它会有所帮助!

【讨论】:

以上是关于OxyPlot 无法在 Xamarin Forms UWP 中呈现的主要内容,如果未能解决你的问题,请参考以下文章

UWP Xamarin 中的 Oxyplot 未更新

OxyPlot 未在 Xamarin 表单中显示

Xamarin图表开发基础教程OxyPlot框架

Xamarin图表开发基础教程OxyPlot框架

Xamarin图表开发基础教程OxyPlot框架

在 Xamarin.Android 中通过 MVVMCross 绑定 OxyPlot