C# 表单:Oxyplot占据整个页面
我已经在Xamarin.Forms中使用oxyplot成功生成了一个绘图,但我无法阻止oxyplot占用整个页面 我在旋转木马的其他页面上使用stacklayout,并且在每个页面上都有一个横幅作为嵌入式stacklayout,并且希望在其下方的嵌入式stacklayout中显示绘图 但是横幅短暂地出现,然后被oxyplot覆盖 我发现有人提到应该使用网格而不是stacklayout,因为存在一些已知的问题,但网格也不起作用 感谢您的帮助!这可能是一个绑定问题,例如,如果我删除Model=“{binding Model}”,它仍然有效!它会忽略HeightRequest=“100”而只是填充页面。很明显,我遗漏了一些东西 这是xaml代码,我已经注释掉了网格尝试,“oxy:PlotView”中的各种选项是我最后尝试的:C# 表单:Oxyplot占据整个页面,c#,xaml,xamarin.forms,oxyplot,C#,Xaml,Xamarin.forms,Oxyplot,我已经在Xamarin.Forms中使用oxyplot成功生成了一个绘图,但我无法阻止oxyplot占用整个页面 我在旋转木马的其他页面上使用stacklayout,并且在每个页面上都有一个横幅作为嵌入式stacklayout,并且希望在其下方的嵌入式stacklayout中显示绘图 但是横幅短暂地出现,然后被oxyplot覆盖 我发现有人提到应该使用网格而不是stacklayout,因为存在一些已知的问题,但网格也不起作用 感谢您的帮助!这可能是一个绑定问题,例如,如果我删除Model=“{b
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="RentGuru2.PieCosts"
xmlns:oxy="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms"
Padding="0, 20, 0, 0"
BackgroundColor="#21b09c">
<StackLayout Orientation="Vertical">
<StackLayout Orientation="Horizontal" BackgroundColor="#21b09c" HeightRequest="60">
<Image Source = "BannerLogo.png" />
<Label Text="Costs breakdown" FontSize="Large" TextColor="White" Margin="10" VerticalTextAlignment="Center"/>
</StackLayout>
<StackLayout HeightRequest="300">
<oxy:PlotView Model="{Binding Model}" VerticalOptions="Center" HorizontalOptions="FillAndExpand"
HeightRequest="100" WidthRequest="100" />
</StackLayout>
</StackLayout>
<!--<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="5*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Image Grid.Row="0" Grid.Column ="0" Source = "BannerLogo.png" />
<Label Grid.Row="0" Grid.Column ="1" Text="Costs breakdown" FontSize="Large" TextColor="White" Margin="10" VerticalTextAlignment="Center"/>
<oxy:PlotView Grid.Row="1" Grid.ColumnSpan ="2" Model="{Binding Model}" VerticalOptions="Center" HorizontalOptions="Center" />
</Grid>-->
</ContentPage>
正如我们在评论部分提到的,整个页面的
内容
被绘图视图
所取代。而且,你的装订也坏了。下面是一些关于如何执行的示例代码:
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:local="clr-namespace:App39"
xmlns:oxy="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms"
x:Class="App39.MainPage">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="5*"/>
<RowDefinition Height="5*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="4*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0"
Grid.ColumnSpan="2"
Text="My Sample App"
FontAttributes="Bold"
FontSize="Large"
VerticalOptions="Center"
HorizontalOptions="Center" />
<oxy:PlotView
Grid.Row="1"
Grid.Column="1"
Model="{Binding Model}"/>
<Image Grid.Row="2"
Grid.Column="0"
Source="pic111.jpg"
Aspect="Fill" />
<BoxView Grid.Row="1"
Grid.Column="0"
HorizontalOptions="Fill"
VerticalOptions="Fill"
Color="LightBlue"/>
<BoxView Grid.Row="2"
Grid.Column="1"
HorizontalOptions="Fill"
VerticalOptions="Fill"
Color="LightSeaGreen"/>
</Grid>
</ContentPage.Content>
public partial class MainPage : ContentPage
{
SampleViewModel vm;
public MainPage()
{
InitializeComponent();
vm = new SampleViewModel();
BindingContext = vm;
}
}
public class SampleViewModel
{
public PlotModel Model { get; set; }
public SampleViewModel()
{
Model = GetModel();
}
private PlotModel GetModel()
{
var plotModel1 = new PlotModel();
plotModel1.Title = "Sample Pie Chart";
plotModel1.Background = OxyColors.LightGray;
var pieSeries1 = new PieSeries();
pieSeries1.StartAngle = 90;
pieSeries1.FontSize = 18;
pieSeries1.FontWeight = FontWeights.Bold;
pieSeries1.TextColor = OxyColors.LightGray;
pieSeries1.Slices.Add(new PieSlice("A", 12));
pieSeries1.Slices.Add(new PieSlice("B", 14));
pieSeries1.Slices.Add(new PieSlice("C", 16));
plotModel1.Series.Add(pieSeries1);
return plotModel1;
}
}
<StackLayout>
<Button Text="Update" x:Name="cmdUpdate" Clicked="cmdUpdate_Clicked" />
<oxy:PlotView Model="{Binding Model}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"/>
</StackLayout>
public partial class MainPage : ContentPage
{
public PlotModel Model = ExampleGenerator.LineSeries();
public MainPage()
{
InitializeComponent();
BindingContext = this;
}
}
查看模型:
<?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:local="clr-namespace:App39"
xmlns:oxy="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms"
x:Class="App39.MainPage">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="5*"/>
<RowDefinition Height="5*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="4*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0"
Grid.ColumnSpan="2"
Text="My Sample App"
FontAttributes="Bold"
FontSize="Large"
VerticalOptions="Center"
HorizontalOptions="Center" />
<oxy:PlotView
Grid.Row="1"
Grid.Column="1"
Model="{Binding Model}"/>
<Image Grid.Row="2"
Grid.Column="0"
Source="pic111.jpg"
Aspect="Fill" />
<BoxView Grid.Row="1"
Grid.Column="0"
HorizontalOptions="Fill"
VerticalOptions="Fill"
Color="LightBlue"/>
<BoxView Grid.Row="2"
Grid.Column="1"
HorizontalOptions="Fill"
VerticalOptions="Fill"
Color="LightSeaGreen"/>
</Grid>
</ContentPage.Content>
public partial class MainPage : ContentPage
{
SampleViewModel vm;
public MainPage()
{
InitializeComponent();
vm = new SampleViewModel();
BindingContext = vm;
}
}
public class SampleViewModel
{
public PlotModel Model { get; set; }
public SampleViewModel()
{
Model = GetModel();
}
private PlotModel GetModel()
{
var plotModel1 = new PlotModel();
plotModel1.Title = "Sample Pie Chart";
plotModel1.Background = OxyColors.LightGray;
var pieSeries1 = new PieSeries();
pieSeries1.StartAngle = 90;
pieSeries1.FontSize = 18;
pieSeries1.FontWeight = FontWeights.Bold;
pieSeries1.TextColor = OxyColors.LightGray;
pieSeries1.Slices.Add(new PieSlice("A", 12));
pieSeries1.Slices.Add(new PieSlice("B", 14));
pieSeries1.Slices.Add(new PieSlice("C", 16));
plotModel1.Series.Add(pieSeries1);
return plotModel1;
}
}
<StackLayout>
<Button Text="Update" x:Name="cmdUpdate" Clicked="cmdUpdate_Clicked" />
<oxy:PlotView Model="{Binding Model}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"/>
</StackLayout>
public partial class MainPage : ContentPage
{
public PlotModel Model = ExampleGenerator.LineSeries();
public MainPage()
{
InitializeComponent();
BindingContext = this;
}
}
我也在努力解决这个问题,jsanalytics解决方案是正确的。我注意到使用
BindingContext=this代码>和在页面中创建模型属性无效
模型
属性必须是单独的Viewmodel类中的属性
此代码不起作用:
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:local="clr-namespace:App39"
xmlns:oxy="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms"
x:Class="App39.MainPage">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="5*"/>
<RowDefinition Height="5*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="4*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0"
Grid.ColumnSpan="2"
Text="My Sample App"
FontAttributes="Bold"
FontSize="Large"
VerticalOptions="Center"
HorizontalOptions="Center" />
<oxy:PlotView
Grid.Row="1"
Grid.Column="1"
Model="{Binding Model}"/>
<Image Grid.Row="2"
Grid.Column="0"
Source="pic111.jpg"
Aspect="Fill" />
<BoxView Grid.Row="1"
Grid.Column="0"
HorizontalOptions="Fill"
VerticalOptions="Fill"
Color="LightBlue"/>
<BoxView Grid.Row="2"
Grid.Column="1"
HorizontalOptions="Fill"
VerticalOptions="Fill"
Color="LightSeaGreen"/>
</Grid>
</ContentPage.Content>
public partial class MainPage : ContentPage
{
SampleViewModel vm;
public MainPage()
{
InitializeComponent();
vm = new SampleViewModel();
BindingContext = vm;
}
}
public class SampleViewModel
{
public PlotModel Model { get; set; }
public SampleViewModel()
{
Model = GetModel();
}
private PlotModel GetModel()
{
var plotModel1 = new PlotModel();
plotModel1.Title = "Sample Pie Chart";
plotModel1.Background = OxyColors.LightGray;
var pieSeries1 = new PieSeries();
pieSeries1.StartAngle = 90;
pieSeries1.FontSize = 18;
pieSeries1.FontWeight = FontWeights.Bold;
pieSeries1.TextColor = OxyColors.LightGray;
pieSeries1.Slices.Add(new PieSlice("A", 12));
pieSeries1.Slices.Add(new PieSlice("B", 14));
pieSeries1.Slices.Add(new PieSlice("C", 16));
plotModel1.Series.Add(pieSeries1);
return plotModel1;
}
}
<StackLayout>
<Button Text="Update" x:Name="cmdUpdate" Clicked="cmdUpdate_Clicked" />
<oxy:PlotView Model="{Binding Model}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"/>
</StackLayout>
public partial class MainPage : ContentPage
{
public PlotModel Model = ExampleGenerator.LineSeries();
public MainPage()
{
InitializeComponent();
BindingContext = this;
}
}
OnAppearing()
将整个页面的内容
替换为绘图视图
。。。所以,你得到了你想要的…:哦)太棒了!由于您的努力,现在可以按要求工作了。我也对Xamarin的工作原理有了更好的了解,再次感谢。非常感谢您提供的这个解决方案。它工作得很好,让你想知道为什么官方文档没有提供这样的信息。@jsanalytics我也有同样的问题,但我没有使用xamarin.forms,而是使用Mvvmcross和xamarin.Android。我的问题是:BindingContext=this代码>也可以工作。。。在上面的代码示例中,PlotModel-Model
声明缺少get
和set
acessor,这使其成为字段而不是属性,因此绑定无法工作。顺便说一句,如果在VS中检查输出窗口,您应该会看到类似“Property not found”的绑定表达式错误。