现代UI(Metro)图表WPF未显示出来。

3
我正在使用.NET Framework 4.5和WPF进行我的项目。我需要生成几种类型的图表,所以我想使用http://modernuicharts.codeplex.com/库来完成。我按照该codeplex页面上的文档:http://modernuicharts.codeplex.com/documentation并完成了步骤。
现在,在Visual Studio 13中没有任何错误或警告消息,但是图表根本没有显示出来。我只能看到图表的标题和副标题。
这个问题可能的原因是什么,如何纠正?
谢谢
XAML代码:
<Canvas Margin="570,90,29,92" Background="White" >
                <chart:PieChart
        Style="{StaticResource MinimalChartStyle}"
        ChartTitle="Minimal Pie Chart"
        ChartSubTitle="Chart with fixed width and height"
        SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}" >
                    <chart:PieChart.Series>
                        <chart:ChartSeries
                SeriesTitle="Errors"
                DisplayMember="Category"
                ValueMember="Number"
                ItemsSource="{Binding Path=Errors}" />
                    </chart:PieChart.Series>
                </chart:PieChart>
            </Canvas>

ViewModel类用作数据上下文:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ModernUIForWPFSample.WithoutBackButton.Views
{
    public class MainViewModel
    {
        public ObservableCollection<TestClass> Errors { get; private set; }

        public MainViewModel()
        {
            Errors = new ObservableCollection<TestClass>();
            Errors.Add(new TestClass() { Category = "Globalization", Number = 75 });
            Errors.Add(new TestClass() { Category = "Features", Number = 2 });
            Errors.Add(new TestClass() { Category = "ContentTypes", Number = 12 });
            Errors.Add(new TestClass() { Category = "Correctness", Number = 83});
            Errors.Add(new TestClass() { Category = "Best Practices", Number = 29 });
        }

        private object selectedItem = null;
        public object SelectedItem
        {
            get
            {
                return selectedItem;
            }
            set
            {
                // selected item has changed
                selectedItem = value;                
            }
        }
    }

    // class which represent a data point in the chart
    public class TestClass
    {
        public string Category { get; set; }

        public int Number  { get; set; }        
    }

}

在代码后面:

public FinalAnalysis()
        {
            InitializeComponent();
            this.DataContext = new MainViewModel();
        }
1个回答

2
这是一个工作示例:
应用程序XAML:
<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"
             xmlns:chart="clr-namespace:De.TorstenMandelkow.MetroChart;assembly=De.TorstenMandelkow.MetroChart">
    <Application.Resources>
        <ResourceDictionary>
            <Style x:Key="MinimalChartStyle" TargetType="chart:ChartBase">
                <Setter Property="Width" Value="500"/>
                <Setter Property="Height" Value="500"/>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

主窗口 XAML:

<Window 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="WpfApplication1.MainWindow"
        Title="MainWindow" Height="1500" Width="1525"
        xmlns:metroChart="clr-namespace:De.TorstenMandelkow.MetroChart;assembly=De.TorstenMandelkow.MetroChart">


        <metroChart:PieChart
        Style="{StaticResource MinimalChartStyle}"
        ChartTitle="Minimal Pie Chart"
        ChartSubTitle="Chart with fixed width and height"
        SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}" >
            <metroChart:PieChart.Series>
                <metroChart:ChartSeries
                SeriesTitle="Errors"
                DisplayMember="Category"
                ValueMember="Number"
                ItemsSource="{Binding Path=Errors}" />
            </metroChart:PieChart.Series>
        </metroChart:PieChart>

</Window>

主窗口cs文件:

public MainWindow()
{

    InitializeComponent();
    DataContext = new MainViewModel();
}

MainWindowViewModel与您的相同,我不会在此处复制粘贴它。请注意程序集声明:

 xmlns:metroChart="clr-namespace:De.TorstenMandelkow.MetroChart;assembly=De.TorstenMandelkow.MetroChart"

不要忘记在App xaml中添加样式。

你按照文档“De.TorstenMandelkow.MetroChart”中的说明正确地添加了程序集吗(适用于wpf)?它标记为“复制本地 true”吗?尝试清理+重建,或重置Visual Studio。我自己尝试了代码并且可以工作,所以可能是你的设置问题...也许目标平台是4.5.1,而你需要4.5? - Dragos Stoica
我创建了一个新项目并使用了你的代码,现在它可以工作了。但是我需要将这个图表添加到我目前正在开发的现有项目中。那里我正在使用WPF UserControlls来制作GUI,而不是WPF Windows。这会有问题吗?我需要在UserControll中显示这个图表。 - Shiran S Ekanayake
不管是用户控件还是窗口,都要确保您添加了正确的dll -> De.TorstenMandelkow.MetroChart for WPF,您必须包含此dll并转到属性,确保设置为复制本地true。文档中的步骤1:1.将De.TorstenMandelkow.MetroChart.dll引用到您的项目中。 - Dragos Stoica
很高兴听到你成功了!请将答案标记为正确。 - Dragos Stoica
1
这并不是问题的解决方案,因此不应将其标记为正确答案。@ShiranSEkanayake,请您根据您解决问题的方式发布详细的答案。这篇帖子在谷歌上排名第一,而标记为正确答案的内容与解决冲突样式无关。 - user562566
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接