gpt4 book ai didi

绑定(bind)似乎工作正常时报告 WPF 绑定(bind)错误

转载 作者:行者123 更新时间:2023-12-03 18:11:58 27 4
gpt4 key购买 nike

我正在尝试在我的 WPF 4.0 应用程序(使用 VS 2010 Pro RTM)中创建自定义 TabItem 模板/样式,但尽管一切似乎都正常工作,但我注意到跟踪窗口中存在绑定(bind)错误。

我用来设置 TabControl 的 TabItems 样式的资源字典 XAML 已完整给出 here . (只需创建一个包含多个项目的简单 TabControl,然后应用给定的 ResourceDictionary 对其进行测试。)

具体来说,错误是由于以下行而发生的(通过反复试验发现,因为 Visual Studio 实际上并未在设计时报告它。

<TranslateTransform X="{Binding ActualWidth, ElementName=leftSideBorderPath}"/>

跟踪(输出窗口)中给出的完整错误如下:

System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。绑定(bind)表达式:路径=实际宽度;数据项=空;目标元素是 'TranslateTransform' (HashCode=35345840);目标属性是“X”(类型“Double”)

错误发生在加载时,然后重复 5 次(请注意,我的示例中有 3 个选项卡项)。每当调整窗口大小时,它也会始终如一地重复发生,例如 - 填充输出窗口。也许每次更新 TabItem 布局时?

而且,虽然没有报告,但错误很大程度上似乎是由于我绑定(bind)到 any 元素,而不是特别是 leftSideBorderPath 或 ActualWidth 属性。例如,将此行更改为以下内容可以解决问题。

<TranslateTransform X="25"/>

不幸的是,硬编码值并不是一个真正的选择。

这个问题对我来说似乎很奇怪,因为绑定(bind)似乎给出了正确的结果。 (在运行时检查 TranslateTransform 的 X 值清楚地显示了正确的绑定(bind)值,并且在查看时 ClipGeometry 正是它应该的样子。)Visual Studio 和 WPF 似乎都没有给我任何关于错误原因的更多信息(将 PresentationTraceSources.TraceLevel 设置为 High 无济于事),但尽管报告错误但一切正常,这一事实使我倾向于认为这是一些边缘案例的 WPF 错误。

附带说明一下,Visual Studio WPF 设计器和 XAML 编辑器给我以下行的问题:

<PathGeometry Figures="{Binding Source={StaticResource TabSideFillFigures}}"/>

虽然 WPF(在运行时)非常乐意将 Figures 绑定(bind)到 TabSideFillFigures 字符串,但绑定(bind)强制使用 TypeConverter,XAML 编辑器和 WPF 设计器却在提示。 ControlTemplate 的所有 XAML 代码都带有下划线,我在错误列表中收到以下错误:

Error 9
'{DependencyProperty.UnsetValue}' is not a valid value for the 'System.Windows.Controls.Control.Template' property on a Setter.
C:\Users\Alex\Documents\Visual Studio 2010\Projects\Ircsil\devel\Ircsil\MainWindow.xaml 1 1 Ircsil

Error 10 Object reference not set to an instance of an object.
C:\Users\Alex\Documents\Visual Studio 2010\Projects\Ircsil\devel\Ircsil\Skins\Default\MainSkin.xaml 58 17 Ircsil

再次重申,一切在运行时都运行良好,这就是让这个特别奇怪的原因......

有人能否阐明这些问题,特别是第一个(这似乎是一个潜在的 WPF 错误)和后者(这似乎是一个 Visual Studio 错误)。非常感谢任何类型的反馈或建议!

编辑:

我已将完整的解决方案(这是一个相当小的项目)作为 ZIP file 上传到我的服务器.您应该能够立即看到错误,并准备好进行测试。

最佳答案

在输出中看到其中一些绑定(bind)错误是很常见的。它只是一个加载时间问题。为了避免输出中出现噪音,您可以关闭特定绑定(bind)的跟踪消息:

    ...
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
...

<Binding ... diag:PresentationTraceSources.TraceLevel="Off" />

关于绑定(bind)似乎工作正常时报告 WPF 绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2708585/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com