簡體   English   中英

相對資源發現者在數據可視化圖表線系列中的使用

[英]Use of relativesource findancestor in datavisualization chart lineseries

我已經生成了一個數據可視化折線圖,現在我試圖構建一個自定義工具提示,並且已經很接近了,但是還遠遠不夠。 這是我針對View的相關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個空格,然后粘貼,但這似乎沒有用。

無論如何,我都想使用相對源來引用LineSeriesChart本身,以便在MultiFormattingConverter可以訪問DataContext (我的vm)和集合。 然后,我可以使用“點”中的數據,這是TemplatedParent給我的信息,用於查找我的LineSeries所有3個值,並生成一個工具提示,其中包含每個可觀察集合的值。 無論我在FindAncestor, AncestorType=什么FindAncestor, AncestorType=代碼中指定的內容,我都仍然以“未設置”作為值數組中的第一個對象。

上面的代碼通過指定我的UserControl使用一種變體,但是它不起作用。 我試過charting:Chartcharting:Chart1charting:LineSeriescharting:entrySeries ,但似乎沒有為我工作。 有人可以幫我找出在FindAncestor指定什么嗎?

這里的問題是ToolTip結構不是Chart可視化樹的子級,因此沒有辦法讓它在樹中上/下行走並找到您要查找的內容-實際上,如果要使用Snoop或其他WPF嗅探工具,您會發現ToolTip樹有效地“終止”了您的StackPanel (或非常接近它)

嘗試使用ElementName綁定而不是FindAncestor ,並指定圖表/系列元素的名稱。 有時可以使用它來解決此類問題。

一種替代方法是創建一種“填充程序”,可以從該工具提示內部將其代理回Chart ,但這超出了我目前在手機中鍵入的意願。 :)

我沒有嘗試上面建議的ElementName方法。 相反,我決定通過使用常規的FormattingConverter進行簡化,傳遞的值為TemplatedParent-LineDataPoint。 現在,我使用GetParent(ldp)並擁有Canvas,它具有我的vm作為datacontext。 此時,我可以訪問可觀察的集合,並且可以提取要包含在自定義工具提示中的值。 感謝所有海報。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM