首先,对标题感到抱歉。如果有建议,很高兴将其更改为更好的东西。
我是wpf的新手,无法解决这个问题。我的UserControl数据上下文中有一个属性List <> Serieslist。此列表中的项目是livecharts SeriesCollection图表(我认为此问题与我对wpf的无能而不是与活动图表有关)。我可以从StackPanel中找到UserControl的祖先,但是当进入带有Series =“ {Binding}”的lvc:CartesianChart时,我找不到。
我的XAML:
<Grid Grid.Column="1">
<StackPanel >
<ItemsControl ItemsSource="{Binding Serieslist}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<!--These Bindings work as intended-->
<TextBlock Text="{Binding Path=DataContext.From, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
<TextBlock Text="{Binding Path=DataContext.To, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
<lvc:CartesianChart Height="100" Series="{Binding}" Zoom="X" Grid.Column="0" DisableAnimations="True" DataTooltip="{x:Null}">
<lvc:CartesianChart.AxisX>
<!--These Bindings don't-->
<lvc:Axis LabelFormatter="{Binding Path=DataContext.Formatter, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
MinValue = "{Binding Path=DataContext.From, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
MaxValue = "{Binding Path=DataContext.To, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
RangeChangedCommand="{Binding Path=DataContext.Axis_OnRangeChangedCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
</lvc:CartesianChart.AxisX>
<lvc:CartesianChart.AxisY>
<lvc:Axis Foreground="DodgerBlue" MinValue="0"/>
<lvc:Axis Foreground="IndianRed" Position="RightTop" MinValue="0" MaxValue="10"/>
</lvc:CartesianChart.AxisY>
</lvc:CartesianChart>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
我了解进入CartesianChart时{Binding}范围会发生变化,但是为什么这种使用RelativeSource的方法不能找到正确的绑定源?
这些活动图表轴元素也在我的实时视觉树中找到。 [Bars]是UserControl,没有其他UserControls
为此类简单的(?)问题,命名祖先元素并找到带有名称的datacontext似乎很困难。另外,我可能需要重用这些用户控件,并且我想避免使用name = usercontrol1 name = usercontrol2 name = usercontrol3等访问父控件的方式。
谢谢您的帮助!