0

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

4

1 回答 1

0

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

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

我只能建议您尝试准确定位问题的根源。您可以通过注释掉代码部分然后运行您的解决方案来查看问题是否已消除或是否仍然存在来做到这一点。您的问题很少发生的事实将使这个阶段更加棘手。

但是,只要坚持不懈,您应该能够缩小问题出现的范围。一旦您设法排除了足够多的代码,最后一步是查看您是否在一个更小的新 WPF 项目中重新创建它。如果您设法达到这个阶段,请回来并出示您的简化代码……然后,我们也许可以为您提供进一步的帮助。

于 2013-08-15T14:16:32.597 回答