Wpf UI选项卡控制调试和部署版本之间的可见性更改

Wpf UI选项卡控制调试和部署版本之间的可见性更改,wpf,vb.net,mvvm,clickonce,mvvm-light,Wpf,Vb.net,Mvvm,Clickonce,Mvvm Light,我有一个WPF Mvvm Light应用程序,它使用选项卡控件向用户显示不同的视图 问题: 我遇到的问题是,当程序首次加载时,选项卡控件显示为空。但是在本地调试时,这个问题永远不会发生。这个应用程序已经开发了一年多,没有出现这个问题,它突然开始出现。见下图 黑客修复: 如果用户调整其窗口的大小,则选项卡控件中的内容将刷新并显示,并且当用户打开应用程序时,问题不会再次出现。但是,这个问题在第一次加载程序和第一次加载选项卡(同时发生)时100%都会发生 细节: 下面是如何定义插入选项卡控件的视图

我有一个WPF Mvvm Light应用程序,它使用选项卡控件向用户显示不同的视图

问题: 我遇到的问题是,当程序首次加载时,选项卡控件显示为空。但是在本地调试时,这个问题永远不会发生。这个应用程序已经开发了一年多,没有出现这个问题,它突然开始出现。见下图

黑客修复: 如果用户调整其窗口的大小,则选项卡控件中的内容将刷新并显示,并且当用户打开应用程序时,问题不会再次出现。但是,这个问题在第一次加载程序和第一次加载选项卡(同时发生)时100%都会发生

细节: 下面是如何定义插入选项卡控件的视图

 <DataTemplate DataType="{x:Type FtcViewModel:DashboardNavViewModel}">
   <FtcView:DashboardNav  />
 </DataTemplate>
问题: 有人能帮我弄清楚为什么会发生这种情况,或者建议在第一次加载应用程序后刷新UI的方法吗

提前谢谢

更新1-2017年10月4日 我已经能够在我的开发机器上重现这个问题。当UI为空时,您可以看到“不显示”。下图显示了正在调试的同一个应用程序,但没有XAML工具箱的应用程序就是缺少ui元素的应用程序

以下内容未在自定义选项卡控件样式内呈现:

<ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" >
    <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>

编辑2 2017年10月11日
我在xaml和ViewModel中的代码中都设置了断点。我可以确认ViewModel数据已正确初始化并分配给可观察对象。我还在tabItemTemplate中插入了“test”文本块,以确认哪个部分没有显示。现在,我有一个可怕的黑客从应用程序启动时的代码调整窗口的大小,虽然这是工作,我仍然想弄清楚是怎么回事

这是一个非常粗糙的方法,但您可以尝试以下方法:

Public Sub YourFormName.OnLoad ()
    Dim CorrectFormSize As Intager = YourFormName.Size
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.Size = New Size(CorrectFormSize)
End Sub
请记住,这将自动执行您描述的调整大小过程

如果您想保存几行,因为您的应用程序在加载后将全屏显示,那么您可以跳过几行,改为执行以下操作:

Public Sub YourFormName.OnLoad()
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.WindowState = System.Windows.Forms.FormWindowState.Maximized
End Sub

我只能给你一些一般性的建议。您可以使用wpfsnoop()调试WPF应用程序。即使问题发生在发布版本的客户机上。如果您有任何绑定错误,我还建议您删除它们-您可以在输出窗口中找到它们。记录它们也可能会有很大帮助(请参阅:)@swiszcz谢谢,我已经确认所有绑定错误都已删除。snoop太旧了,我的应用程序无法使用它。没有改变另一个提示:关于.NET3.5,WPF中有一个bug,有时一些样式在第一次使用时没有应用。您可以通过简单地使用ContentPresenter两次来检查是否存在这种情况。在windows构造函数中调用InvalidateVisual()难道不能解决这个问题吗?看起来像是这个问题,-我认为根本原因与消息泵过滤器有关,并获得和失去焦点,请参见此处的奇怪情况(参见类似的WPF案例)。
Public Sub YourFormName.OnLoad ()
    Dim CorrectFormSize As Intager = YourFormName.Size
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.Size = New Size(CorrectFormSize)
End Sub
Public Sub YourFormName.OnLoad()
    YourFormName.Size = New Size(300, 300)
    System.Threading.Thread.Sleep(1000)
    YourFormName.WindowState = System.Windows.Forms.FormWindowState.Maximized
End Sub