1

Datavisualization 折れ線グラフを生成しました。現在、カスタム ツールチップを作成しようとしていますが、まだ完成していません。ビューに関連する XAML を次に示します (MVVM を使用)。

<charting:Chart x:Name="Chart1" Height="Auto" Width="Auto" Title="Profit and Loss"  
            DockPanel.Dock="Bottom"
            PlotAreaStyle="{StaticResource PlotAreaStyle}" 
            MinHeight="200" 
            MinWidth="200" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch">
    <charting:Chart.Resources>
        <ControlTemplate x:Key="LineDataPointTemplate" TargetType="charting:LineDataPoint">
            <Grid x:Name="Root" Opacity="1">
                <ToolTipService.ToolTip>
                    <StackPanel>
                        <ContentControl>
                            <ContentControl.Content>
                                <MultiBinding Converter="{StaticResource MultiFormattingConverter}">
                                    <MultiBinding.Bindings>
                                        <Binding  Path="Title" >
                                            <Binding.RelativeSource>
                                                <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}" />
                                            </Binding.RelativeSource>
                                        </Binding>
                                        <Binding RelativeSource="{RelativeSource TemplatedParent}"/>
                                    </MultiBinding.Bindings>
                                </MultiBinding>
                            </ContentControl.Content>
                        </ContentControl>
                    </StackPanel>
                </ToolTipService.ToolTip>
            </Grid>
        </ControlTemplate>
    </charting:Chart.Resources>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <ei:CallMethodAction TargetObject="{Binding}" MethodName="ChartLoadedMethod" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <charting:Chart.Series>
      <charting:LineSeries x:Name="entrySeries" ItemsSource="{Binding EntryDataPointColl}" 
             Title="{Binding entryDateLegend}"
             d:DataContext="EntryDataPointColl.xml"
             IndependentValueBinding="{Binding Path=Xvalue}" 
             FlowDirection="LeftToRight" 
             DependentValueBinding="{Binding Path=Yvalue}" 
             >
        <charting:LineSeries.DataPointStyle>
            <Style TargetType="{x:Type charting:LineDataPoint}">
                <Setter Property="Visibility" Value="Collapsed" />
                <Setter Property="Opacity" Value="0" />
                <Setter Property="Background" Value="DarkGreen" />
                <Setter Property="Template" Value="{StaticResource LineDataPointTemplate}"/>

うーん、コードの入力の仕方がわからない… スペース4つインデントしてから貼り付けたのですが、うまくいかないようです。

いずれにせよ、相対ソースを使用して、LineSeriesまたはChartそれ自体を参照して、 (my vm) とコレクションにMultiFormattingConverterアクセスできるようにします。DataContext次に、「ポイント」からのデータを使用して、TemplatedParent3 つすべての値を検索し、LineSeries観察可能なコレクションごとに値を持つツールチップを生成できます。コードで何を指定してFindAncestor, AncestorType=も、値配列の最初のオブジェクトとして「未設定」になります。

上記のコードは、 my を指定して 1 つのバリエーションを使用しUserControlていますが、機能しません。charting:Chartcharting:Chart1charting:LineSeriesを試しましcharting:entrySeriesたが、何もうまくいかないようです。で指定する内容を理解するのを手伝ってもらえますFindAncestorか?

4

2 に答える 2

0

ここでの問題は、ToolTip構造がChartビジュアル ツリーの子ではないため、ツリーを上下に移動して探しているものを見つける方法がないことです。実際、これを Snoop または他のWPFスニッフィングツールを使用すると、ToolTipツリーが実際にStackPanel(またはその非常に近くで) 「終了」することがわかります

ElementNameの代わりにバインディングを使用してみてFindAncestor、チャート/シリーズ要素の名前を指定してください。これは、この種の問題を回避するために使用できる場合があります。

代わりのアプローチは、そのツール ヒント内からプロキシ バックできる一種の「シム」を作成することChartですが、それは現時点で私の携帯電話に入力する意欲から少し外れています。:)

于 2013-02-07T23:44:47.407 に答える
0

上記で提案した ElementName アプローチは試しませんでした。代わりに、渡される値が TemplatedParent (LineDataPoint) である通常の FormattingConverter を使用して単純化することにしました。今、私は GetParent(ldp) を使用し、キャンバスを持っています。キャンバスには、vm がデータコンテキストとして含まれています。この時点で、監視可能なコレクションにアクセスでき、カスタム ツールチップに含めたい値を抽出できます。すべてのポスターに感謝します。

于 2013-02-08T03:16:27.693 に答える