locked
silverlight toolkit のchartコントロールを使用して、グラフ要素がmousehoverされたとき、その要素の名前をコードで取得する方法を教えてください。 RRS feed

  • 質問

  • vs2010 silverlight4 と toolkitを使用しています。

    グラフ上の要素(分散図の、個々のポイントなど)にMouseHoverしたときに、MouseEnterイベントで、拾うことはできます。

    しかし、senderオブジェクトを見ると、chratコントロールが返されているようで、どの要素にhoverされているのか、取得できません。

    chartコントロールのプロパティーに、hoverされてアクティブになっている要素のindexなどがあるかとも思って探してみたのですが、わかりません。

    お手数ですが、どなたかご教授いただけないでしょうか

     

    以下xamlです。

    <UserControl x:Class="SilverlightApplication14.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:Controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Toolkit"
        xmlns:Charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">

        <Grid x:Name="LayoutRoot" Background="White">
            <Charting:Chart Title="ノート PC" x:Name="_chart">
                <Charting:Chart.Series>

                    <!--カラムチャートを指定-->
                    <Charting:ColumnSeries
                  
                        Title="売上"
                        ItemsSource="{Binding}"
                        IndependentValueBinding="{Binding Name}"
                        DependentValueBinding="{Binding Sales}" 
                        MouseEnter="ColumnSeries_MouseEnter"

                        />


                </Charting:Chart.Series>
            </Charting:Chart>
        </Grid>
    </UserControl>

     

    以下コードです


    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Net
    Imports System.Windows
    Imports System.Windows.Controls
    Imports System.Windows.Documents
    Imports System.Windows.Input
    Imports System.Windows.Media
    Imports System.Windows.Media.Animation
    Imports System.Windows.Shapes
    Partial Public Class MainPage
        Inherits UserControl

        Public Sub New()
            InitializeComponent()

            _chart.DataContext = New Product() {New Product() With { _
         .Name = "VAIO", _
         .Sales = 1200000 _
       }, New Product() With { _
         .Name = "Let's Note", _
         .Sales = 700000 _
       }, New Product() With { _
         .Name = "FMV", _
         .Sales = 900000 _
       }, New Product() With { _
         .Name = "Lavie", _
         .Sales = 1800000 _
       }}

        End Sub

        Private Sub ColumnSeries_MouseEnter(sender As System.Object, e As System.Windows.Input.MouseEventArgs)

        ’ここで、要素のnameなどIDを取得したい 

     End Sub


    End Class

     

    Public Class Product
        Public Property Name() As String
            Get
                Return m_Name
            End Get
            Set(value As String)
                m_Name = value
            End Set
        End Property
        Private m_Name As String
        Public Property Sales() As Decimal
            Get
                Return m_Sales
            End Get
            Set(value As Decimal)
                m_Sales = value
            End Set
        End Property
        Private m_Sales As Decimal
    End Class

    2011年12月6日 3:04

すべての返信

  • ExpressionBlendをお持ちでしたら、
    ScatterSeriesの「追加テンプレートの編集」→「ScatterDataPointStyle」でテンプレートが編集できますので、
    テンプレート内コントロールのMouseEnterでCommandをInvokeするなり、ほかの処理をするなりできます。

    ちなみにグラフの値がほしい場合は

    {TemplateBinding FormattedDependentValue}
    

    で取得できそうですね。

    ※実際に検証はしていません。


    ☆TFC Software http://www.tfc-software.com/
    ☆プログラミングに関するブログ http://www.tfc-software.com/Blogs.aspx
    2012年1月4日 17:31