我在 WPF 中使用 Telerik 的 RadChart,当我想为附加 Y 轴指定 MaxValue、MinValue 和 Step 时遇到问题。
如果我像这样对值进行硬编码(相关部分是最后四行),它会很好地工作:
<Controls:AxisY MinorTicksVisibility="Hidden"
DefaultLabelFormat="#VAL{#,##0}"
Title="{UI:Language @{xCubicMetrePerHourSymbol}}"
MajorGridLinesVisibility="Hidden" StripLinesVisibility="Visible"
AxisName="CubicMetreAxis"
AutoRange="False"
MaxValue="10000"
MinValue="0"
Step="0">
但由于我想根据系列中的值更改 MinValue、MaxValue 和 Step,我必须使用 ViewModel 对象(应该是我继承的 DataContext)的属性以这种方式绑定(bind)它:
<Controls:AxisY MinorTicksVisibility="Hidden"
DefaultLabelFormat="#VAL{#,##0}"
Title="{UI:Language @{xCubicMetrePerHourSymbol}}"
MajorGridLinesVisibility="Hidden" StripLinesVisibility="Visible"
AxisName="CubicMetreAxis"
AutoRange="False"
MaxValue="{Binding Path=MyMaxValue}"
MinValue="{Binding Path=MyMinValue}"
Step="{Binding Path=MyStep}">
但似乎无法从我使用 Snoop 收集的附加 Y 轴上看到/设置 DataContext。
我收到以下错误消息(每个绑定(bind)的消息相同):
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or
FrameworkContentElement for target element. BindingExpression:Path=MyMaxValue;
DataItem=null; target element is 'AxisY' (HashCode=47300984); target property is
'MaxValue' (type 'Double')
我以为我在某个地方犯了一个错误并搜索了几个小时,但我发现了一些奇怪的东西:如果我在“原始”Y 轴上使用这些绑定(bind),一切都会完美无缺。两个轴的代码完全相同。唯一的区别在于父元素。
这个有效:
<Controls:ChartArea.AxisY>
<Controls:AxisY MinorTicksVisibility="Hidden"
DefaultLabelFormat="#VAL{#,##0}"
Title="{UI:Language @{GigaJoulePerHourSymbol}}"
MajorGridLinesVisibility="Hidden"
StripLinesVisibility="Visible"
AutoRange="False"
MaxValue="{Binding Path=MyMaxValue}"
MinValue="{Binding Path=MyMinValue}"
Step="{Binding Path=MyStep}">
<Controls:AxisY.AxisStyles>
<Controls:AxisStyles TitleStyle="{StaticResource TranslatedAxisStyle}" />
</Controls:AxisY.AxisStyles>
</Controls:AxisY>
</Controls:ChartArea.AxisY>
这不是:
<Controls:ChartArea.AdditionalYAxes>
<Controls:AxisY MinorTicksVisibility="Hidden"
DefaultLabelFormat="#VAL{#,##0}"
Title="{UI:Language @{xCubicMetrePerHourSymbol}}"
MajorGridLinesVisibility="Hidden"
StripLinesVisibility="Visible"
AxisName="CubicMetrePerHourAxis"
AutoRange="False"
MaxValue="{Binding Path=MyMaxValue}"
MinValue="{Binding Path=MyMinValue}"
Step="{Binding Path=MyStep}">
<Controls:AxisY.AxisStyles>
<Controls:AxisStyles TitleStyle="{StaticResource TranslatedAxisStyle}" />
</Controls:AxisY.AxisStyles>
</Controls:AxisY>
</Controls:ChartArea.AdditionalYAxes>
元素本身是完全一样的,只是第二个有名字,标题不一样,不过我测试了一下,其实并没有什么影响。唯一的区别是父元素不同。
我想知道为什么 AxisY 可以看到 DataContext 并且可以正确绑定(bind),而 AdditionalYAxis 却不能。
最佳答案
因为 AdditionalYAxis
大概不在 visual tree 中,它不会继承其逻辑树父级的 DataContext
。这就解释了为什么绑定(bind)不能以正常方式工作。您可以使用类似于概述的解决方法 here (“数据上下文 spy ”)以使绑定(bind)正常工作。
关于c# - 无法在 Telerik 中使用附加 Y 轴的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20154881/