0

どこからデバッグを開始すればよいかわからない WPF ビジネス ライン アプリケーション プロトタイプに問題があります。

私のマスター ウィンドウ (A) は、Dialog.Show() を使用して「ダイアログ」ウィンドウを開きます。子ウィンドウ (B) にはコンボボックスがあります。

コンボボックスをクリックすると (展開してすべてのオプションを表示するため)、コンボボックスから表示されるドロップダウンリストを除いて、2 番目のウィンドウ全体 (B) が非表示になります。コンボボックスもウィンドウもありません。ドロップダウン リストとその背後にあるマスター ウィンドウ以外には何もありません。マスター ウィンドウをクリックすると、フォーカスが再びウィンドウ B に設定され、表示されます (ウィンドウ B の所有者をウィンドウ A に設定したため)。

さらに興味深いことに、このバグには一貫性がありません。アプリケーションを使用する 20 回に 1 回の頻度で表示されます。

おそらく関連しているのは、私が MessageBoxes で同じバグを何度か持っていると思うという事実です。マスター ウィンドウ (A) のみが表示されているときにビューモデルから MessageBox.Show() (Win フォーム msgbox) を使用すると、ボックスがマスター ウィンドウの背後に表示され、ユーザーから見えなくなります。

私のアプリケーションは、GalaSoft MvvmLight (それが関係している場合) とかなりの数のテレリック コンポーネントを使用しています。それ以外は、どのデータを提供すればよいかわかりません。この情報に基づいて問題の原因を特定できる人はいないと思いますが、どこから問題を探し始めますか?

更新 : 朗報です! 問題を切り分け、現象が発生するための前提条件の組み合わせを見つけました。 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>

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();
    }
}

これについて Telerik とオープン チケットを持っているので、何かわかりましたらここで更新します。

4

1 に答える 1