WPF调试数据绑定 - VS2008输出窗口在连接到进程时没有输出

时间:2012-07-10 04:21:34

标签: wpf

朋友们。 我正在根据this调试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启动,我所能做的就是附加到进程)。

1 个答案:

答案 0 :(得分: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