加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在WPF C#设计问题中绘制图表

发布时间:2020-12-15 21:21:23 所属栏目:百科 来源:网络整理
导读:我一个月前有一个项目,我在使用 Windows Forms的应用程序中绘制了一个股票图表.我这样做是通过创建一个可以拉伸到窗口尺寸的位图.这将允许我的图表使用窗口调整大小. 我现在正在使用WPF扩展项目.我一直在努力为我的项目设计工作,但我似乎无法了解做同样图表
我一个月前有一个项目,我在使用 Windows Forms的应用程序中绘制了一个股票图表.我这样做是通过创建一个可以拉伸到窗口尺寸的位图.这将允许我的图表使用窗口调整大小.

我现在正在使用WPF扩展项目.我一直在努力为我的项目设计工作,但我似乎无法了解做同样图表的最佳方法.我看过画布,网格和其他一些控件.我以为我在画布的正确轨道上,但是当我调整窗口大小时,我的绘图将保持在同一个位置.我想我今晚发表的观点是为了帮助我为我的项目集思广益.

所有建议和问题都表示赞赏.

谢谢,
约瑟夫

解决方法

(实现这个地址充其量只是这个相当古老的问题的一个子集,因为它只是一种图表类型…)

只需fwiw,在网格中创建条形图为Ed suggests非常简单.这是一个快速而又脏的版本:

将一个网格添加到Window的XAML中.只是为了测试,这里完全填满了Window.

<Grid>
    <Grid
        Name="myGrid"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch"
        Width="auto"
        Height="auto"
        Margin="10,10,10"
    />
</Grid>

现在在项目的某处插入这两个实用程序函数.它们为x轴提供简单的单色列和无样式但居中的标签文本.

我认为唯一令人讨厌的问题是_placeSingleColorColumn调用中的maxHeight.

Worth mentioning: I don’t have labels for the y-axis in this quick & dirty version.

private void _placeSingleColorColumn(Grid grid,Color color,int height,int colNum,int maxHeight)
{
    Brush brush = new SolidColorBrush(color);

    Rectangle rect = new Rectangle();
    rect.Fill = brush;
    Grid.SetColumn(rect,colNum);
    Grid.SetRow(rect,maxHeight - height);
    Grid.SetRowSpan(rect,height);

    grid.Children.Add(rect);
}

private void _createLabels(Grid grid,string[] labels)
{
    RowDefinition rowDefnLabels = new RowDefinition();
    grid.RowDefinitions.Add(rowDefnLabels);

    for (int i = 0; i < labels.Length; i++)
    {
        TextBlock block = new TextBlock();
        block.Text = labels[i];
        block.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
        Grid.SetColumn(block,i);
        Grid.SetRow(block,grid.RowDefinitions.Count);
        grid.Children.Add(block);
    }
}

真的是这样的.这里有一些疯狂的快速和脏的示例代码,用于创建带有一些示例数据的10 x 10网格.

public void createGrid10x10()
{
    Random random = new Random();

    for (int i=0; i<10; i++)
    {
        ColumnDefinition colDef = new ColumnDefinition();
        myGrid.ColumnDefinitions.Add(colDef);

        RowDefinition rowDef = new RowDefinition();
        myGrid.RowDefinitions.Add(rowDef);

        Color color = i % 2 == 0 ? Colors.Red : Colors.Blue;

        _placeSingleColorColumn(this.myGrid,color,random.Next(1,11),i,10);
    }
    string[] aLabels = "Dogs,Cats,Birds,Snakes,Rabbits,Hamsters,Horses,Rats,Bats,Unicorns".Split(',');
    _createLabels(this.myGrid,aLabels);
}

在MainWindow构造函数中添加一行,然后就完成了.

public MainWindow()
{
    InitializeComponent();
    this.createGrid10x10();
}

现在你已经有了一个条形图,当窗口调整大小时,它会调整大小并保持比例.

如果您了解上述内容,添加更多标签(顶部的条形值,y轴标签等)应该非常简单.只需抛出另一列和/或行,创建TextBlock,然后将它们放在正确的位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读