有時候你須要漂亮的圖表和大量比較絢麗的動畫效果,可是有時候又沒有必要展現太多視覺上的控件,想要最小化圖表空間,使用WPF圖表控件Chart FX for WPF就能夠很好的實現這兩種需求。 app
好比說你有一系列的產品,你想要展現關於這些產品一些列的信息,包括產品名稱、版本等。 動畫
public class ProductInfo { public string Name { get; set; } public string Version { get; set; } public List<ProductDownloads> Downloads { get; set; } public string LatestRelease { get; set; } } public class ProductDownloads { public double Count { get; set; } } For simplicity we will use a templated listbox to show multiple columns so our first approach to the problem will look like this <ListBox Grid.IsSharedSizeScope="true"> <ListBox.ItemTemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" SharedSizeGroup="ColumnName"/> <ColumnDefinition Width="Auto" SharedSizeGroup="ColumnVersion"/> <ColumnDefinition Width="150" /> <ColumnDefinition Width="Auto" SharedSizeGroup="ColumnRelease"/> </Grid.ColumnDefinitions> <TextBlock VerticalAlignment="Center" Grid.Column="0" Text="{Binding Path=Name}" Margin="4,0"/> <TextBlock VerticalAlignment="Center" Grid.Column="1" Text="{Binding Path=Version}" Margin="4,0"/> <cfx:Chart x:Name="chart1" Grid.Column="2" ItemsSource="{Binding Path=Downloads}" Gallery="Line" Margin="4,0"> <cfx:Chart.Series> <cfx:SeriesAttributes BindingPath="Count"/> </cfx:Chart.Series> <cfx:Chart.LegendBox> <cfx:LegendBox Visibility="Collapsed"/> </cfx:Chart.LegendBox> </cfx:Chart> <TextBlock VerticalAlignment="Center" Grid.Column="3" Text="{Binding Path=LatestRelease}" Margin="4,0"/> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
如今在咱們上面獲得的示例的基礎上進行圖表的簡化: this
<cfx:Chart x:Name="chart1" Grid.Column="2" ItemsSource="{Binding Path=Downloads}" Gallery="Line" Margin="4,0" Height="20"> <cfx:Chart.Series> <cfx:SeriesAttributes BindingPath="Count" Stroke="Black" StrokeThickness="1"> <cfx:SeriesAttributes.Marker> <cfx:MarkerAttributes Visibility="Collapsed"/> </cfx:SeriesAttributes.Marker> </cfx:SeriesAttributes> </cfx:Chart.Series> <cfx:Chart.LegendBox> <cfx:LegendBox Visibility="Collapsed"/> </cfx:Chart.LegendBox> <cfx:Chart.AxisY> <cfx:Axis Visibility="Collapsed"/> </cfx:Chart.AxisY> <cfx:Chart.AxisX> <cfx:Axis Visibility="Collapsed"/> </cfx:Chart.AxisX> <cfx:Chart.PlotArea> <cfx:PlotAreaAttributes Margin="0" AxesStyle="None" Background="{x:Null}" Stroke="{x:Null}"/> </cfx:Chart.PlotArea> <cfx:Chart.Template> <ControlTemplate> <Border cfx:Chart.PanelName="Plot"/> </ControlTemplate> </cfx:Chart.Template> </cfx:Chart>
在這一步中,咱們作了一些簡單的變化,好比說隱藏了裏那個軸和標記,同時還設置了一些筆刷,值得注意的是,在這裏的plotarea一般是指頁邊空白包圍,可是在一些小的圖表中,不須要這個頁邊空白。所以咱們能夠將圖表的高度設置到20。 調試
咱們也簡化了圖表模版,經過使用預先定義好的樣式能夠很好實現,可是這個樣式容許使用legend box或者是dataview。 code
接下來就是一些調試就能夠完成了,注意在默認的狀況下,列表框將會改變選定項的前景色爲白色,在DataTemplate中須要一個觸發器來完成這個操做: ip
<DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True"> <Setter TargetName="series" Property="Stroke" Value="White" /> </DataTrigger> </DataTemplate.Triggers>
由於 DataTemplate 實際上應用於 ContentPresenter,咱們須要觸發器找到ListBoxItem類型的第一個ancestor。 ci
雖說這個圖表很小,可是依然支持鼠標的停靠操做,顯示提示信息,具體代碼以下: get
<cfx:SeriesAttributes.ToolTips> <cfx:ToolTipAttributes x:Name="tooltips" IsEnabled="False"/> </cfx:SeriesAttributes.ToolTips> <DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True"> <Setter TargetName="series" Property="Stroke" Value="White" /> <Setter TargetName="tooltips" Property="IsEnabled" Value="True" /> </DataTrigger> </DataTemplate.Triggers>