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-視覚化-列データポイント-追加-注釈.aspx

バーが非常に高い場合、注釈の上部は部分的にのみ表示されるか、表示されません。

ここに画像の説明を入力

データの範囲がわからないため、縦軸に最大値を設定できません。

この問題を解決するには?

4

1 に答える 1

1

アンドレが言ったように、問題はマージンなので、次のようにマルチバインディングを使用してマージンを計算できます。

<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;
    }
}
于 2012-10-18T07:36:50.103 に答える