2011-01-26 31 views
2

wpfツールキットで作成されたチャートの他の部分(列、棒など)をどのように強調表示できますか?私はコントロールテンプレートを使用して私自身のチャートをスタイルしています。これまで私はトリガーを使って、マウスが存在する要素にフェーディング効果をもたらしました。私はこれを逆にしたい。マウスが指していない他の要素(一般的なチャートの視覚的仕掛け)を消してしまいます。画像の次には選択した列がぼやけて表示されていますが、これは逆の形になります。column fadedWpfツールキットチャート反転反転

答えて

1

デフォルト値を淡色に設定し、トリガーを使用して完全な不透明度にします。あなたは、いくつかの他のスタイリングをしますが、ここでデフォルトのスタイルに基づいた例でいる:

<Grid> 
    <Grid.Resources> 
     <PointCollection x:Key="sampleData"> 
      <Point>1,20</Point> 
      <Point>2,40</Point> 
      <Point>3,30</Point> 
     </PointCollection> 
     <Style x:Key="dimEffectStyle" TargetType="{x:Type charting:ColumnDataPoint}" BasedOn="{StaticResource {x:Type charting:ColumnDataPoint}}"> 
      <Setter Property="Opacity" Value="0.25"/> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Trigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.1" /> 
          </Storyboard> 
         </BeginStoryboard> 
        </Trigger.EnterActions> 
        <Trigger.ExitActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.25" Duration="0:0:0.1" /> 
          </Storyboard> 
         </BeginStoryboard> 
        </Trigger.ExitActions> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Resources> 
    <charting:Chart> 
     <charting:ColumnSeries 
      Title="A" 
      ItemsSource="{StaticResource sampleData}" 
      IndependentValueBinding="{Binding X}" 
      DependentValueBinding="{Binding Y}" 
      DataPointStyle="{StaticResource dimEffectStyle}" 
      /> 
    </charting:Chart> 
</Grid> 

編集:

あなたがデータポイントを除く他のすべてのデータポイントを変更したい場合は、マウスを超えています、それはちょっと難しく、単にコントロールを再作成するだけではできません。しかし、あなたは、その能力を持つ独自のシリーズコントロールを作成することができます。ここで

<Grid.Resources> 
     <PointCollection x:Key="sampleData"> 
      <Point>1,20</Point> 
      <Point>2,40</Point> 
      <Point>3,30</Point> 
     </PointCollection> 
    </Grid.Resources> 
    <charting:Chart Name="chart1"> 
     <local:MouseNotOverColumnSeries 
      Title="A" 
      ItemsSource="{StaticResource sampleData}" 
      IndependentValueBinding="{Binding X}" 
      DependentValueBinding="{Binding Y}" 
      MouseNotOverOpacity="0.5" 
      /> 
    </charting:Chart> 

MouseNotOverColumnSeriesクラスされています:ここで新しいMouseNotOverOpacityプロパティでMouseNotOverColumnSeries呼ばunstyled列系列クラスを持つチャートである

public class MouseNotOverColumnSeries : ColumnSeries 
{ 
    public double MouseNotOverOpacity { get; set; } 

    protected override void OnDataPointsChanged(IList<DataPoint> newDataPoints, IList<DataPoint> oldDataPoints) 
    { 
     base.OnDataPointsChanged(newDataPoints, oldDataPoints); 
     foreach (var dataPoint in oldDataPoints) 
     { 
      dataPoint.MouseEnter -= new MouseEventHandler(dataPoint_MouseEnter); 
      dataPoint.MouseLeave -= new MouseEventHandler(dataPoint_MouseLeave); 
     } 
     foreach (var dataPoint in newDataPoints) 
     { 
      dataPoint.MouseEnter += new MouseEventHandler(dataPoint_MouseEnter); 
      dataPoint.MouseLeave += new MouseEventHandler(dataPoint_MouseLeave); 
     } 
    } 

    void dataPoint_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
     foreach (var dataPoint in ActiveDataPoints) 
      if (e.OriginalSource != dataPoint) dataPoint.Opacity = MouseNotOverOpacity; 
    } 

    void dataPoint_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
     foreach (var dataPoint in ActiveDataPoints) 
      dataPoint.Opacity = 1; 
    } 
} 

私達はちょうどのデータポイントが変更されたときに注意を払うと登録の不透明度を操作するマウスの出入りハンドラは、他のすべてのデータポイントはマウスが終了していません。これはストーリーボードなどをサポートするように拡張することができます。

+0

こんにちはリック、ありがとう、あなたの答えをありがとう。しかし、私が探している効果は多少異なります。サンプルはhttp://examples.idashboards.com/idashboards/?guestuser=wpsc1こちらのリンクをご覧ください。フォーカスされた列が明るく保たれている間、他の列はすべて消えます。あなたの答えをもう一度おねがいします。 –