我有一个 WPF 业务线应用程序原型的问题,我不知道从哪里开始调试。
我的主窗口 (A) 使用 Dialog.Show() 打开一个“对话”窗口。子窗口 (B) 上有一个组合框。
当单击组合框(展开并显示所有选项)时,整个第二个窗口 (B) 被隐藏,除了从组合框中出现的下拉列表。组合框不存在,窗口也不存在。除了下拉列表和它后面的主窗口之外,什么都没有。如果我单击主窗口,则焦点再次设置为窗口 B,并按原样显示(因为我将窗口 B 的所有者设置为窗口 A)。
为了使它更有趣,这个错误并不一致。它出现在我使用该应用程序的 20 次中可能有 1 次,当它开始出现时,它可能会连续出现几次,然后再停止发生。
可能相关的事实是,我认为 MessageBoxes 有时我有同样的错误。从视图模型中使用 MessageBox.Show()(Win 窗体 msgbox)时,只有主窗口 (A) 显示该框偶尔出现在主窗口后面,使其对用户不可见。
我的应用程序正在使用 GalaSoft MvvmLight(如果这可能与它有关)和相当多的 Telerik 组件。除此之外,我不确定要提供什么数据。我认为没有人可以根据这些信息告诉我问题的根源,但是您会从哪里开始寻找问题呢?
更新:好消息!我已经隔离了问题并发现了发生这种现象的先决条件组合:a) 显示 PDF 文件的组件当前在应用程序的任何位置打开。b) Telerik 组件已取消停靠和重新停靠。
我将包含下面的代码,但我认为问题深埋在 RadDocking 或 WebBrowser 组件中。
主窗口
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void OpenWindowClick(object sender, RoutedEventArgs e)
{
var w = new TestWindow { Owner = this, DataContext = new TestViewModel()};
w.Show();
}
}
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:telerikDocking="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Docking"
x:Class="TelerikGridDockingVsBrowserVsWindowBug.MainWindow"
Title="MainWindow" Height="750" Width="925">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="200"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<telerikDocking:RadDocking Grid.Row="0">
<telerikDocking:RadSplitContainer>
<telerikDocking:RadPaneGroup>
<telerikDocking:RadPane Header="I make bugs combined with a webbrowser showing a pdf document">
<TextBlock Text="1. Drag me and dock on the same or another location"/>
</telerikDocking:RadPane>
</telerikDocking:RadPaneGroup>
</telerikDocking:RadSplitContainer>
</telerikDocking:RadDocking>
<Button Grid.Row="1" Click="OpenWindowClick" Content="2. Open window" Height="50" Margin="0,20"/>
<WebBrowser Grid.Row="2" Source="http://www.kb.nl/sites/default/files/docs/pdf_guidelines.pdf"/>
</Grid>
测试窗口:
public partial class TestWindow : Window
{
public TestWindow()
{
InitializeComponent();
}
}
<Window x:Class="TelerikGridDockingVsBrowserVsWindowBug.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestWindow" Height="150" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock> 3. Click on the combobox.</TextBlock>
<ComboBox Grid.Row="1" ItemsSource="{Binding Options}" SelectedItem="{Binding SelectedOption}" Height="50"></ComboBox>
<TextBlock Grid.Row="2"> This window will then disappear behind its owner</TextBlock>
</Grid>
测试窗口视图模型:
public class TestViewModel
{
public List<string> Options { get; set; }
public string SelectedOption { get; set; }
public TestViewModel()
{
Options = new List<string> { "String1", "String2" };
SelectedOption = Options.First();
}
}
我有 Telerik 的公开票,所以如果我发现任何东西,我会在这里更新。