我在将一些VB.Net winforms代码移植到WPF时遇到了相当令人沮丧的时间,并且可以提供一些帮助:
简而言之,我拥有动态生成的数据,我需要在lineseries上绘制。无论我尝试什么,图表都顽固地拒绝显示我的数据!我几乎与.DataContext / .ItemsSource / Bindings /等的每一个组合都搞砸了。我可以找到并且有一个严肃的谷歌,但好的VB.Net例子似乎很薄。我显然错过了一些“简单”的东西......任何建议都会受到欢迎。
剪切代码如下:
XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" x:Class="MainWindow"
Title="MainWindow" Height="350" Width="525">
<Grid>
<chartingToolkit:Chart x:Name="MyChart" HorizontalAlignment="Left" Margin="10,10,0,0" Title="Chart Title" VerticalAlignment="Top" Height="300" Width="497">
<chartingToolkit:LineSeries x:Name="MyLineSeries" DependentValueBinding="{Binding Path=Intensity}" IndependentValueBinding="{Binding Path=PxNum}" IsSelectionEnabled="True" ItemsSource="{Binding}" >
<!-- Vertical axis for Intensity values -->
<chartingToolkit:LineSeries.DependentRangeAxis>
<chartingToolkit:LinearAxis
Orientation="Y"
Title="Intensity"
Minimum="0"
Maximum="65535"
Interval="8000"
ShowGridLines="True"
/>
</chartingToolkit:LineSeries.DependentRangeAxis>
</chartingToolkit:LineSeries>
<chartingToolkit:Chart.Axes>
<!-- Shared horizontal axis -->
<chartingToolkit:LinearAxis
Orientation="X"
Title="Detector px"
Interval="64"
Minimum="0"
Maximum="256"
ShowGridLines="True"/>
</chartingToolkit:Chart.Axes>
</chartingToolkit:Chart>
</Grid>
</Window>
VB:
Imports System.Collections.ObjectModel
Class MainWindow
Dim Series_Saturation As New ObservableCollection(Of GraphPoint)
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Series_Saturation.Add(New GraphPoint() With {.PxNum = 0, .Intensity = 54000}) ' New KeyValuePair(Of Int32, Int32)(0, 54000))
Series_Saturation.Add(New GraphPoint() With {.PxNum = 200, .Intensity = 54000}) ' New KeyValuePair(Of Int32, Int32)(nPX, 54000))
MyLineSeries.DataContext = Series_Saturation
End Sub
End Class
Public Class GraphPoint
Public Property PxNum As Long
Public Property Intensity As Long
End Class
答案 0 :(得分:0)
对它进行排序: - )
信息的重要组成部分在此链接中:how to plot values in line series graph using two textboxes in wpf
似乎有两个细微之处 - 似乎没有孤立地解决问题,但两者的结合确实如此:
基本上,只需在VB WPF窗口上拖放WPF工具包图表,就可以添加xmlns条目:
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" x:Class="MainWindow"
Title =“MainWindow”身高=“350”宽度=“525”&gt;
,您的图表定义为
<chartingToolkit:Chart x:Name="MyChart" ...>
</chartingToolkit:Chart>
这一切似乎编译好了,但是我的VB代码不会显示点数。请注意以下代码中的不同xmlns,它们似乎工作得很好。这可能是因为我的开发PC上有多个开发环境?
另请注意,在此示例中,为图表设置了datacontext,而不是行系列。我的下一个挑战是看看当我尝试显示多行时会发生什么!
我还应该补充一点,定义轴的方式的变化不是使其表现的因素,这只是探索的众多途径之一。文本框&amp;按钮只是为了展示添加点 - 我对布局中缺乏技巧没有道歉,我只是希望这件事能够发挥作用!!
XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Toolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
x:Class="MainWindow"
Title="MainWindow" Height="352.357" Width="803.114">
<Grid>
<Toolkit:Chart Name="MyChart"
Title="Line Series Demo"
VerticalAlignment="Top"
Height="320"
Width="500" Margin="32,0,263,0">
<Toolkit:Chart.Axes>
<!-- Shared horizontal axis -->
<Toolkit:LinearAxis
Orientation="X"
Title="Detector px"
Interval="64"
Minimum="0"
Maximum="256"
ShowGridLines="True"/>
<Toolkit:LinearAxis
Orientation="Y"
Title="Intensity"
Minimum="0"
Maximum="65535"
Interval="8000"
ShowGridLines="True"/>
</Toolkit:Chart.Axes>
<Toolkit:LineSeries DependentValuePath="Intensity"
IndependentValuePath="PxNum"
ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged}"
IsSelectionEnabled="True"/>
</Toolkit:Chart>
<TextBox x:Name="txtX" HorizontalAlignment="Left" Height="25" Margin="550,10,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="78"/>
<TextBox x:Name="txtY" HorizontalAlignment="Left" Height="25" Margin="648,10,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="78"/>
<Button x:Name="butAdd" Content="Add Point" HorizontalAlignment="Left" Height="29" Margin="648,40,0,0" VerticalAlignment="Top" Width="78"/>
</Grid>
</Window>
VB:
Imports System.Collections.ObjectModel
Class MainWindow
Dim Series_Saturation As New ObservableCollection(Of GraphPoint)
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Series_Saturation.Add(New GraphPoint() With {.PxNum = 0, .Intensity = 54000}) ' New KeyValuePair(Of Int32, Int32)(0, 54000))
Series_Saturation.Add(New GraphPoint() With {.PxNum = 200, .Intensity = 4000}) ' New KeyValuePair(Of Int32, Int32)(nPX, 54000))
MyChart.DataContext = Series_Saturation
End Sub
Private Sub butAdd_Click(sender As Object, e As RoutedEventArgs) Handles butAdd.Click
Dim X As Int32 = CInt(txtX.Text)
Dim Y As Int32 = CInt(txtY.Text)
Series_Saturation.Add(New GraphPoint() With {.PxNum = X, .Intensity = Y})
End Sub
End Class
Public Class GraphPoint
Public Property PxNum As Long
Public Property Intensity As Long
End Class
我衷心希望这有助于其他人!