0

我正在写作是因为我对 wpf 及其图形有疑问。基本上,我想创建一个柱形图。我的问题是我无法设置列的宽度。在互联网上,我只看到了固定宽度的列的示例。

我的 XAML 代码是这样的:

<Grid Height="871" Width="572">
        <chartingToolkit:Chart Height="337" HorizontalAlignment="Left"    Margin="65,0,0,496" Name="columnChart" Title="Column Series Demo" VerticalAlignment="Bottom" Width="440">
            <chartingToolkit:Chart.Axes>
                <chartingToolkit:LinearAxis Title="Wireless Power" Orientation="Y" Interval="100" />
                <chartingToolkit:LinearAxis Title="Time" Orientation="X" Interval="100" />
            </chartingToolkit:Chart.Axes>
            <chartingToolkit:ColumnSeries Name="myGraph" IndependentValuePath="Key" ItemsSource="{Binding}" AnimationSequence="FirstTo"/>             
        </chartingToolkit:Chart>
</Grid>

后面的代码是:

private void showColumnChart(){

    List<KeyValuePair <int, int>> valueList = new List<KeyValuePair<int, int>>();
    valueList.Add(new KeyValuePair<int, int>(12, 55));
    valueList.Add(new KeyValuePair<int, int>(15, 60));
    columnChart.DataContext = valueList;
}

现在,我的目的是代表我白天无线的强度。但是可能有没有连接的时候,那么电源就没有了,或者有的时候,例如,从晚上 7 点到晚上 8 点,信号强度等于-78db。我以前收集在一个数据库中,现在我想代表它们。所以我的目标是,例如考虑 24 小时的时间间隔,将条形图放在图表上,其中 x 轴是无线功率的检测时间,而 y 轴是功率。

我希望我已经解释清楚了。

4

1 回答 1

0

事实上,与您分享我的 Wpf-toolkit / 图表实验:我希望我从未在我的磁盘上安装过它。
使用它会更快:

  1. 画布。(甚至是一个很好的旧网格)。
  2. 对象的一个​​或多个 DataTemplate。
  3. 处理缩放的控制器对象(如果需要)。
  4. 然后是 Canvas 中的 ItemControl,绑定到 ObservableCollection。

毕竟,条形图只不过是一组样式化的矩形......

我的建议:避免使用 Wpf 工具包,它没有记录。不可能有一个清晰的想法,例如,如何根据需要处理颜色。当您检查对象时,论坛上的一些教程/答案根本无法应用:规格更改了很多次。
因此,要么图表的预设适合你,然后去做,但如果你想自由设计你的组件,你自己或选择一个记录/工作的库会更好。

如果你去另一个库,我帮不了你更多:谷歌是你的朋友,
如果你想自己做,我很快就让你开始了:

条形图示例的快照

<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:l="clr-namespace:WpfApplication1"
        Title="MainWindow"
        Width="525"
        Height="350"
        Loaded="Window_Loaded">
    <Window.Resources>
        <DataTemplate DataType="{x:Type l:Datata}">
            <Rectangle Width="10"
                       Height="{Binding SomeValue}"
                       VerticalAlignment="Bottom"
                       Margin="10,0"
                       Fill="Black" />
        </DataTemplate>

    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="10" />
        </Grid.RowDefinitions>
        <!--  Vertical Axis  -->
        <Path Grid.Row="0"
              Grid.RowSpan="2"
              Grid.Column="0"
              Stretch="Fill"
              Stroke="Black"
              StrokeThickness="2">
            <Path.Data>
                <LineGeometry StartPoint="0,0" EndPoint="0,1" />
            </Path.Data>
        </Path>
        <!--  Horizontal axis  -->
        <Path Grid.Row="1"
              Grid.Column="0"
              Grid.ColumnSpan="2"
              Stretch="Fill"
              Stroke="Black"
              StrokeThickness="2">
            <Path.Data>
                <LineGeometry StartPoint="0,0" EndPoint="1,0" />
            </Path.Data>
        </Path>

        <StackPanel Orientation="Horizontal"  Margin="0,5" >
           </StackPanel>
        <ItemsControl    Grid.Row="0" Grid.Column="1"   ItemsSource="{Binding AllValues}"  VerticalAlignment="Bottom">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Grid>
</Window>
于 2012-12-15T10:22:06.297 回答