我使用System.Windows.Controls.DataVisualization.Charting
繪製並顯示包含Y值介於1至5之間的LineSeries的圖表。我將值添加到System.Collections.Generic.KeyValuePair(TKey,TValue)
的LineSeries。我不想在Y標籤圖表中顯示從1到5的數字,而是要顯示從E到A的字母。xaml具有自定義軸標籤的c#圖表
我該如何實現此結果?
我使用System.Windows.Controls.DataVisualization.Charting
繪製並顯示包含Y值介於1至5之間的LineSeries的圖表。我將值添加到System.Collections.Generic.KeyValuePair(TKey,TValue)
的LineSeries。我不想在Y標籤圖表中顯示從1到5的數字,而是要顯示從E到A的字母。xaml具有自定義軸標籤的c#圖表
我該如何實現此結果?
首先創建一個轉換器的數值轉換爲字母的:
public class NumericToAlphaConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (value.ToString())
{
case "1":
return "A";
case "2":
return "B";
case "3":
return "C";
case "4":
return "D";
case "5":
return "E";
default: return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
使用該轉換器定義自定義Ÿ標籤樣式:
<Style TargetType="chartingToolkit:AxisLabel">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="chartingToolkit:AxisLabel">
<TextBlock DataContext="{TemplateBinding FormattedContent}" Text="{Binding Converter={StaticResource NumericToAlphaConverter}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
這裏的孔UI以及相應的代碼
<Window.Resources>
<wpfApplication12:NumericToAlphaConverter x:Key="NumericToAlphaConverter"/>
</Window.Resources>
<Grid>
<chartingToolkit:Chart Title="Line Series"
VerticalAlignment="Top" Margin="0" Height="254" >
<chartingToolkit:LineSeries x:Name="serie"
IndependentValueBinding="{Binding Path=Key}"
DependentValueBinding="{Binding Path=Value}"
IsSelectionEnabled="True"/>
<chartingToolkit:Chart.Axes>
<chartingToolkit:LinearAxis Orientation="Y"
Title="Y val"
Maximum="5"
Minimum="1"
>
<chartingToolkit:LinearAxis.AxisLabelStyle>
<Style TargetType="chartingToolkit:AxisLabel">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="chartingToolkit:AxisLabel">
<TextBlock DataContext="{TemplateBinding FormattedContent}" Text="{Binding Converter={StaticResource NumericToAlphaConverter}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</chartingToolkit:LinearAxis.AxisLabelStyle>
</chartingToolkit:LinearAxis>
</chartingToolkit:Chart.Axes>
</chartingToolkit:Chart>
</Grid>
後面的代碼:
public ObservableCollection<KeyValuePair<int, int>> LineSeriesData = new ObservableCollection<KeyValuePair<int, int>>()
{
new KeyValuePair<int, int>(12,1),
new KeyValuePair<int, int>(5,2),
new KeyValuePair<int, int>(5,3),
new KeyValuePair<int, int>(5,4)
};
public MainWindow()
{
InitializeComponent();
serie.ItemsSource = LineSeriesData;
}
非常感謝您的回答,它非常完美!但是現在我又爲你提出了另一個問題:出於我的目的,我無法在xaml代碼中設置LinearAxis,因爲每次我想要顯示圖形時都需要創建一個新的LinearAxis(因爲Y軸的maxValue發生了變化)。當我在C#代碼中創建新的LinearAxis時,是否可以使用在xaml代碼中定義的Y標籤樣式?如果是,如何?提前致謝! – user3506770
好吧,您不需要每次都通過代碼重新創建Y線性軸,只需定義一個屬性,該屬性將保存最大Y值並將Y最大值綁定到它的Maximum =「{Binding MaxY}」,並將轉換器以處理更多的5個字母(你可以找到更切割的方式來做到這一點,而不是那個醜陋的開關) – Usama
非常感謝,現在它適用於我的目的!你已經解決了我所有的問題! :) – user3506770
我使用的.NET Framework 4.5 – user3506770
我找不到對命名空間信息。你可以使用System.Web.UI.DataVisualization.Charting來代替嗎? –