Wpf 组合框下拉事件触发父窗口Z索引更改
我对WPF业务线应用程序原型有一个问题,我不知道从哪里开始调试 我的主窗口(A)使用dialog.Show()打开一个“对话框”窗口。子窗口(B)上有一个组合框 单击组合框(展开并显示所有选项)时,整个第二个窗口(B)将隐藏,但组合框中出现的dropdownlist除外。组合框不在那里,窗口不在那里。除了dropdownlist和它后面的主窗口之外,没有其他内容。如果我单击主窗口,则焦点将再次设置为窗口B,并按其应显示(因为我将窗口B的所有者设置为窗口A) 更有趣的是,这个bug并不一致。它可能出现在我使用该应用程序的20次中的1次,当它开始出现时,它可以连续出现几次,然后再次停止 可能与此相关的是,我认为我有时在MessageBox上也有相同的bug。当仅主窗口(a)显示时,从viewmodel使用MessageBox.Show()时,该框会偶尔出现在主窗口后面,使用户看不见 我的应用程序使用的是GalaSoft MvvmLight(如果这可能与它有关的话)和许多telerik组件。除此之外,我不确定提供什么数据。我认为没有人能根据这些信息告诉我问题的根源,但是你会从哪里开始寻找问题 更新: 好消息!我已经隔离了问题,并找到了现象发生的先决条件组合: a) 显示PDF文件的组件当前在应用程序的任何位置打开。 b) telerik组件已解除连接并重新连接 我将包括下面的代码,但我认为这个问题埋在RadDocking或WebBrowser组件的深处 主窗口Wpf 组合框下拉事件触发父窗口Z索引更改,wpf,Wpf,我对WPF业务线应用程序原型有一个问题,我不知道从哪里开始调试 我的主窗口(A)使用dialog.Show()打开一个“对话框”窗口。子窗口(B)上有一个组合框 单击组合框(展开并显示所有选项)时,整个第二个窗口(B)将隐藏,但组合框中出现的dropdownlist除外。组合框不在那里,窗口不在那里。除了dropdownlist和它后面的主窗口之外,没有其他内容。如果我单击主窗口,则焦点将再次设置为窗口B,并按其应显示(因为我将窗口B的所有者设置为窗口A) 更有趣的是,这个bug并不一致。它可能
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>
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有void OpenWindowClick(对象发送器,路由目标)
{
var w=newtestwindow{Owner=this,DataContext=newtestviewmodel()};
w、 Show();
}
}
测试窗口:
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>
公共部分类测试窗口:窗口
{
公共测试窗口()
{
初始化组件();
}
}
3.单击组合框。
然后,此窗口将消失在其所有者后面
TestWindow视图模型:
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();
}
}
公共类TestViewModel
{
公共列表选项{get;set;}
公共字符串选择选项{get;set;}
公共TestViewModel()
{
选项=新列表{“String1”、“String2”};
SelectedOption=Options.First();
}
}
关于这件事,我和Telerik有一个公开的问题,如果我发现了什么,我会在这里更新。我以前遇到过你的情况。。。你有一个无法解释的问题。。。这没有任何意义。。。你已经尝试了你能想到的一切。。。在最后的努力来解决这个问题,你扔给所有有经验的用户在这里。。。然后什么都没有。。。没有回应。。。没有帮助 问题是,如果你不能在你面前的所有代码中找到并修复问题,那么我们如何在没有任何代码的情况下修复它呢 我所能建议的就是你试着找出问题的根源。您可以通过注释掉部分代码,然后运行您的解决方案来查看这是否已经消除了问题,或者问题是否仍然存在。事实上,你的问题很少发生,这将使这个阶段更加棘手
然而,有了毅力,你应该能够缩小问题出现的范围。一旦您成功地排除了足够多的代码,最后一步就是查看是否在一个小得多的新WPF项目中重新创建它。如果你设法达到这个阶段,请回来,并显示您的减少代码。。。然后,我们可能会进一步帮助您。我认为您的第一步是处理它,直到您能够始终如一地复制错误为止。把重点放在不同的控件组合上,看看会发生什么。一旦发生这种情况,开始设置断点,比较事情的状态,如果需要帮助,在这里发布一些代码。谢谢Jim。请参见上面的编辑:)