1

朋友们 。我正在根据调试 WPF 数据绑定。我在我的 xaml 中添加了 PresentationTraceSources.TraceLevel。

<Window …
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
/>

<TextBlock Text="{Binding Path=Caption, diagnostics:PresentationTraceSources.TraceLevel=High}" … />

如果我通过按 F5 在 VS2008 中启动我的 WPF 应用程序,在输出窗口中,我确实看到了数据绑定详细信息:

System.Windows.Data Warning: 47 : Created BindingExpression (hash=25209742) for Binding (hash=3888474)
…
System.Windows.Data Warning: 91 : BindingExpression (hash=25209742): GetValue at level 0 from Star (hash=31609076) using RuntimePropertyInfo(Caption): ‘ ‘
System.Windows.Data Warning: 71 : BindingExpression (hash=25209742): TransferValue – got raw value ‘ ‘
System.Windows.Data Warning: 78 : BindingExpression (hash=25209742): TransferValue – using final value ‘ ‘

但是如果我直接运行应用程序并附加 VS2008 来处理,输出窗口中没有数据绑定消息。

为什么当我附加到进程时这些跟踪消息不显示?如何获取这些数据绑定跟踪消息?

(在生产环境中,我的应用程序由另一个 exe 启动,我所能做的就是附加到进程)。

4

1 回答 1

0

这纯粹是猜想。

当您使用 F5 从 Visual Studio 启动应用程序时,它有一个控制台输出窗口,并且可能在 PresentationTraceSources 初始化期间添加了一个默认 ConsoleTraceListener,它能够连接到 Visual Studio 输出控制台。

当您在调试器之外启动应用程序时,它可能不会/无法成功添加 ConsoleTraceListener,因为周围没有......因此,当您将进程附加到调试器时,WPF 数据绑定跟踪源不会重定向到输出窗口。

也许您可以在附加到进程后附加一个控制台侦听器。

System.Diagnostics.PresentationTraceSources.Refresh();
System.Diagnostics.PresentationTraceSources.DataBindingSource.Listeners.Clear();
System.Diagnostics.PresentationTraceSources.DataBindingSource.Listeners.Add(new ConsoleTraceListener());
System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level = System.Diagnostics.SourceLevels.Warning;

最后,是否使用 Bea Stollnitz/Costa 文章中提到的 App.Config 将输出定向到文本文件?.... 那行得通吗?

在附加到进程之后,可能值得检查 System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level 的值。

这将更详细地介绍整个 TraceSources 机制:

http://blogs.msdn.com/b/mikehillberg/archive/2006/09/14/wpftracesources.aspx

于 2012-07-10T10:35:40.570 回答