none
WPF中使用DynamicDataDisplay画直方图应该怎么做 RRS feed

答案

  • 从你的描述看,你首先先学习下怎么在XAML中引入.Net名字空间。学习下如何使用xmlns:xxx="clr-namespace " 因为你的问题在于此,这个不解决你下面的没有办法继续。

    看书上的说明,或者下面的文档:http://msdn.microsoft.com/zh-cn/library/ms747086.aspx 

    DynamicDataDisplay.Silverlight这个程序集是给Silverlight用的,所以你应该使用 DynamicDataDisplay这个程序集。但是在D3中应该是ChartPlotter类为Chart容器,它定义在 Microsoft.Research.DynamicDataDisplay 名字空间下,当然我可以直接使用 xmlns:d3="http://research.microsoft.com/DynamicDataDisplay/1.0"    这个别名来替代DynamicDataDisplay 的clr-namespace映射。

    至于说你要做直方图,我觉得D3是大材小用了,用WPF Toolkit组件 http://wpf.codeplex.com/ 就足够了:

    XAML:

    <Window x:Class="WpfApplication5.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:chart="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
            Title="MainWindow" Height="350" Width="525">
      <Grid>
        <chart:Chart>
          <chart:Chart.Series>
            <chart:ColumnSeries ItemsSource="{Binding}" Title="记录" 
                                DependentValueBinding="{Binding Value}"
                                IndependentValueBinding="{Binding Key}"/>
          </chart:Chart.Series>
        </chart:Chart>
      </Grid>
    </Window>

    C#:

      public partial class MainWindow : Window
      {
        public MainWindow()
        {
          InitializeComponent();
          this.DataContext = new ObservableCollection<KeyValuePair<int, double>>()
          {
            new KeyValuePair<int,double>(1,0.3),
            new KeyValuePair<int,double>(2,0.8),
            new KeyValuePair<int,double>(3,1.3),
            new KeyValuePair<int,double>(4,0.6),
            new KeyValuePair<int,double>(5,0.2),
            new KeyValuePair<int,double>(6,1.5)
          };
        }
      }

    这里下载:https://skydrive.live.com/?cid=51b2fdd068799d15#cid=51B2FDD068799D15&id=51B2FDD068799D15%21963

    这里还有个例子,是我以前写的比较全的一个自定头Chart的,你可以参考学习:https://skydrive.live.com/embed?cid=51B2FDD068799D15&resid=51B2FDD068799D15%21205&authkey=AHie-gESZUpE45g

    你还可以在网上搜下,我回答过很多类似Chart的问题,也写过很多例子,你可参考:https://www.google.com/search?q=site%3Asocial.msdn.microsoft.com+bob+bao+wpf+chart


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    2012年5月10日 3:10
    版主

全部回复

  • 从你的描述看,你首先先学习下怎么在XAML中引入.Net名字空间。学习下如何使用xmlns:xxx="clr-namespace " 因为你的问题在于此,这个不解决你下面的没有办法继续。

    看书上的说明,或者下面的文档:http://msdn.microsoft.com/zh-cn/library/ms747086.aspx 

    DynamicDataDisplay.Silverlight这个程序集是给Silverlight用的,所以你应该使用 DynamicDataDisplay这个程序集。但是在D3中应该是ChartPlotter类为Chart容器,它定义在 Microsoft.Research.DynamicDataDisplay 名字空间下,当然我可以直接使用 xmlns:d3="http://research.microsoft.com/DynamicDataDisplay/1.0"    这个别名来替代DynamicDataDisplay 的clr-namespace映射。

    至于说你要做直方图,我觉得D3是大材小用了,用WPF Toolkit组件 http://wpf.codeplex.com/ 就足够了:

    XAML:

    <Window x:Class="WpfApplication5.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:chart="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
            Title="MainWindow" Height="350" Width="525">
      <Grid>
        <chart:Chart>
          <chart:Chart.Series>
            <chart:ColumnSeries ItemsSource="{Binding}" Title="记录" 
                                DependentValueBinding="{Binding Value}"
                                IndependentValueBinding="{Binding Key}"/>
          </chart:Chart.Series>
        </chart:Chart>
      </Grid>
    </Window>

    C#:

      public partial class MainWindow : Window
      {
        public MainWindow()
        {
          InitializeComponent();
          this.DataContext = new ObservableCollection<KeyValuePair<int, double>>()
          {
            new KeyValuePair<int,double>(1,0.3),
            new KeyValuePair<int,double>(2,0.8),
            new KeyValuePair<int,double>(3,1.3),
            new KeyValuePair<int,double>(4,0.6),
            new KeyValuePair<int,double>(5,0.2),
            new KeyValuePair<int,double>(6,1.5)
          };
        }
      }

    这里下载:https://skydrive.live.com/?cid=51b2fdd068799d15#cid=51B2FDD068799D15&id=51B2FDD068799D15%21963

    这里还有个例子,是我以前写的比较全的一个自定头Chart的,你可以参考学习:https://skydrive.live.com/embed?cid=51B2FDD068799D15&resid=51B2FDD068799D15%21205&authkey=AHie-gESZUpE45g

    你还可以在网上搜下,我回答过很多类似Chart的问题,也写过很多例子,你可参考:https://www.google.com/search?q=site%3Asocial.msdn.microsoft.com+bob+bao+wpf+chart


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    2012年5月10日 3:10
    版主
  • 非常感谢版主,你给的回复非常全面,好好学习一下。我是刚接触wpf,有很多的地方都不懂,以后要常来这个论坛!
    2012年5月10日 5:39
  • 我也做了一个需要显示图像直方图的程序,但是当我对图像处理过来,需要刷新直方图,在您的sample中,数据时observablecollection<T>来作为数据绑定到chart上,当我重写生成直方图的时候,每一个灰度值的计数都会发生变化,这样我改变所有256个灰度值的时候,就会刷新256次直方图,造成速度很慢,有什么办法解决吗?谢谢
    2012年10月12日 6:13