首页 文章

WPF ColumnDataPoint注释部分可见

提问于
浏览
0

我的应用程序中有列系列图表 . 我正在使用本教程中的解决方案在列顶部添加注释:

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

当条形图非常高时,注释的顶部仅部分可见或不可见 .

enter image description here

我不知道我的数据范围,所以我无法在垂直轴上设置最大值 .

如何解决这个问题呢?

1 回答

  • 1

    就像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;
        }
    }
    

相关问题