[英]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個空格,然后粘貼,但這似乎沒有用。
無論如何,我都想使用相對源來引用LineSeries
或Chart
本身,以便在MultiFormattingConverter
可以訪問DataContext
(我的vm)和集合。 然后,我可以使用“點”中的數據,這是TemplatedParent
給我的信息,用於查找我的LineSeries
所有3個值,並生成一個工具提示,其中包含每個可觀察集合的值。 無論我在FindAncestor, AncestorType=
什么FindAncestor, AncestorType=
代碼中指定的內容,我都仍然以“未設置”作為值數組中的第一個對象。
上面的代碼通過指定我的UserControl
使用一種變體,但是它不起作用。 我試過charting:Chart
, charting:Chart1
, charting:LineSeries
, charting: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.