我的应用程序中有列系列图表 . 我正在使用本教程中的解决方案在列顶部添加注释:
http://blogs.msdn.com/b/delay/archive/2009/07/27/simple-column-labels-you-can-create-at-home-re-templating-the-silverlight-wpf-data-visualization-columndatapoint-to-add-annotations.aspx
当条形图非常高时,注释的顶部仅部分可见或不可见 .
我不知道我的数据范围,所以我无法在垂直轴上设置最大值 .
如何解决这个问题呢?
就像Andre说的那样,问题是你的保证金,所以你可以使用Multibinding计算保证金,如下所示:
<ControlTemplate TargetType="charting:ColumnDataPoint"> <Grid> <Rectangle Name="clmnRectangle" Fill="{TemplateBinding Background}" Stroke="Black"/> <Grid Background="#aaffffff" HorizontalAlignment="Center" VerticalAlignment="Top"> <Grid.Margin> <MultiBinding Converter="{StaticResource ResourceKey=HeightToMargin}"> <Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType={x:Type charting:ColumnDataPoint}}"></Binding> <Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType={x:Type charting:ColumnSeries}}"></Binding> </MultiBinding> </Grid.Margin> <TextBlock Name="tbValue" Text="{TemplateBinding FormattedDependentValue}" FontWeight="Bold" Margin="2"/> </Grid> </Grid> </ControlTemplate>
转换器可能看起来像:
public class HeightToMarginConverter:IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo ci) { double clmnHeight = System.Convert.ToDouble(values[0]); double chrtHeight = System.Convert.ToDouble(values[1]); if (chrtHeight - clmnHeight < 20) { return new Thickness(0, clmnHeight - chrtHeight + 5, 0, 0); } else { return new Thickness(0, -20, 0, 0); } } public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo ci) { return null; } }
1 回答
就像Andre说的那样,问题是你的保证金,所以你可以使用Multibinding计算保证金,如下所示:
转换器可能看起来像: