(实现这一解决充其量这个相当老问题的一个子集,因为它只有一个图表类型...)
只是FWIW,创建一个Grid
作为Ed suggests中的柱状图非常简单。这是一个快速和肮脏的版本:
将Grid
添加到您的Window
的XAML。只是为了测试,这里是完全填充Window
的一个。
<Grid>
<Grid
Name="myGrid"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Width="auto"
Height="auto"
Margin="10,10,10,10"
/>
</Grid>
现在在您的项目中的某处插入这两个实用函数。这些提供了简单的单色列和无格式但居中的X轴标签文本。
我觉得唯一讨厌的kludge是_placeSingleColorColumn
调用中的maxHeight
。
值得一提:我没有为y轴的标签在这个快速&脏版。
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乘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
构造函数中,然后完成,afaict。
public MainWindow()
{
InitializeComponent();
this.createGrid10x10();
}
现在你已经有了曲线图,一个酒吧会重新调整和调整窗口大小时留比例等
添加更多标签(在顶栏值, y轴标签等)应该是非常简单明了的,如果你了解上述。只需投入另一列和/或行,创建您的TextBlock
,并将它们放置在正确的位置。
我实际上已经能够使用窗口的ActualHeight/ActualWidth属性来玩。起初,我刚刚获得了NaN,但读到我必须等到“加载”完成。 – Teknos
您也可以使用这些来进行直接绘图 - 更新了我的答案。 –
我有两个窗口,一个用于控件,另一个用于图表。我已经完成了我的统计图的坐标网格,但是我直接将其绘制到网格中。我看到了一些这方面的缺陷,因为它没有按照窗口的比例调整大小......嗯,我将不得不仔细阅读你的答案并做更多的研究。感谢大家的帖子! – Teknos