c# - 无法在 Telerik 中使用附加 Y 轴的绑定(bind)

标签 c# wpf telerik

我在 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/

相关文章:

azure - Azure 构建管道中的 Telerik Nuget 包还原失败

c# - 如何在 lambda 表达式中定义为 LINQ Select 方法中的另一个函数

.net - 如何确定 DockPanel 中包含的所有项目的高度

wpf - 从语义上讲,Commands 和 Converters 应该更接近 Views 还是 ViewModels?

c# - Telerik RadComboBox 未构建

css - Telerik 编辑器 - css 内联样式问题

c# - 我必须在 C# 中处理参数吗?

c# - slowcheetah 转换配置文件中元素的值

c# - 从互锁变量中读取最新值,只对变量进行一次写入

画笔属性的 WPF ColorAnimation