Combobox Dropdown事件触发父窗口Z索引更改

时间:2013-08-15 13:39:35

标签: wpf

我遇到了WPF业务线应用程序原型的问题,我不知道从哪里开始调试。

我的主窗口(A)使用Dialog.Show()打开一个“对话框”窗口。子窗口(B)上有一个组合框。

单击组合框(展开并显示所有选项)时,除组合框中显示的下拉列表外,整个第二个窗口(B)都被隐藏。组合框不在那里,窗户不存在。除了下拉列表和它后面的主窗口之外什么都没有。如果我单击主窗口,则焦点再次设置为窗口B并显示它应该(因为我将窗口B的所有者设置为窗口A)。

为了使它更有趣,这个bug并不一致。它似乎是我使用该应用程序的20次中的一次,当它开始出现时,它可以连续出现几次然后再次停止发生。

可能相关的是我认为我在MessageBoxes中有一些错误。当只有主窗口(A)显示时,在主窗口后面出现一个框,使得它对用户不可见时,从视图模型中使用MessageBox.Show()(Win形成msgbox)。

我的应用程序正在使用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>

TestWindow:

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>

TestWindow ViewModel:

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有一张关于此的开放票,所以如果我发现任何东西,我会在这里更新。

1 个答案:

答案 0 :(得分:0)

我以前一直在你的情况......你有一个无法解释的问题......它没有任何意义......你已经尝试了所有你能想到的......在最后的努力中解决问题,你把它扔给这里所有有经验的用户......然后什么都没有......没有回复......没有帮助。

问题在于,如果您无法在您面前找到并解决所有代码的问题,那么我们如何在没有任何代码的情况下修复它?

我所能建议的是,您可以尝试找到问题的确切位置。您可以通过注释掉代码段然后运行解决方案来查看是否已删除问题或是否仍然存在。事实上你的问题不经常发生会使这个阶段变得更加棘手。

但是,坚持不懈,你应该能够缩小问题所在的范围。一旦您设法排除了足够的代码,最后一步是查看是否在一个小得多的新WPF项目中重新创建它。如果你设法进入这个阶段,请回来显示你的简化代码... 然后,我们可以能够进一步帮助你。