使用Chart FX for WPF簡化圖表(一)

    有時候你須要漂亮的圖表和大量比較絢麗的動畫效果,可是有時候又沒有必要展現太多視覺上的控件,想要最小化圖表空間,使用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

WPF圖表控件Chart FX使用方法系列:如何簡化圖表

    接下來就是一些調試就能夠完成了,注意在默認的狀況下,列表框將會改變選定項的前景色爲白色,在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

WPF圖表控件Chart FX使用方法系列:如何簡化圖表

    雖說這個圖表很小,可是依然支持鼠標的停靠操做,顯示提示信息,具體代碼以下: 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>
相關文章
相關標籤/搜索