按照this简单示例,我只是在将XxyPlot嵌入到Xamarin Forms Sample应用程序中。我创建了一个全新的Xamarin Forms App,添加了Nuget包,并在每个项目中添加了OxyPlot所需的Init代码。 然后,在我的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);
...谢谢
修改
我刚刚创建了一个新的测试项目并得到了完全相同的结果,所以它不是我的项目或机器......
答案 0 :(得分:0)
我遇到了与您提到的问题相同的问题,一个PieChart在Android上运行,而在Xamarin.Forms(3.1.0.697729)上的UWP上却不行。 我终于通过从here而不是1.0.0安装最新版本的OxyPlot.Xamarin.Forms使它在UWP上起作用。对于PieChart来说效果很好,我没有测试其他图。
此外,Oxyplot文档here表示“必须设置VerticalOptions和HorizontalOptions属性”,但是您还需要设置HeightRequest和WidthRequest。我在这篇post中读到了这篇文章,但是与这篇文章相反,它对我来说在StackLayout中可以正常工作。 这个问题已经过时了,但我希望它将对您有帮助!