【问题标题】:WPF ColumnDataPoint Annotation partial visibleWPF ColumnDataPoint 注解部分可见
【发布时间】:2012-10-17 08:59:21
【问题描述】:

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

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

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

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

如何解决这个问题?

【问题讨论】:

  • 现在我不知道如何解决,但问题是负边距。也许您可以在 ControlTemplate 中使用除 Grid 之外的其他容器。

标签: c# .net wpf wpftoolkit data-visualization


【解决方案1】:

就像 Andre 说的,问题是你的 Margin,所以你可以使用 Multibinding 来计算 Margin 像这样:

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

【讨论】:

  • 是的,我知道这是保证金的问题。但我想在外部栏显示注释,即使栏很高。
猜你喜欢
  • 1970-01-01
  • 2013-01-23
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多