为什么WPF ScrollViewer会导致窗口在主窗口后面打开?

时间:2010-08-12 18:25:54

标签: wpf

我的窗口上有一个项目控件,双击时我想打开第二个窗口。我的问题是,如果项目控件包含在滚动查看器中,则新窗口会出现在主窗口后面而不是前面。如果在此代码中注释掉滚动查看器,则窗口将按预期打开。

这是怎么回事?


Window XAML:

<Window x:Class="EktronDataUI.TestWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="TestWindow" Height="300" Width="300">
    <Grid>
        <ScrollViewer>
            <ItemsControl ItemsSource="{Binding Source={StaticResource odpMockSmartForms}}" MouseDoubleClick="ItemsControl_MouseDoubleClick" >
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="Double Click Me" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ScrollViewer>
    </Grid>
</Window>

代码背后:

    private void ItemsControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        TestWindow window = new TestWindow();
        window.Show();
    }

3 个答案:

答案 0 :(得分:2)

您是否尝试告诉MouseButtonEventArgs您已经处理过它?当您在其中双击时,ScrollViewer很可能会尝试聚焦或执行其他操作,导致窗口在打开其他窗口后再次变为活动状态。

private void ItemsControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        e.handled = true;
        TestWindow window = new TestWindow();
        window.Show();
    }

答案 1 :(得分:0)

不确定...但是如果您删除了滚动查看器,问题是否会得到修复,而是使用:

<ItemsControl ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto"/>

答案 2 :(得分:-1)

如果我将TopMost设置为true,我会拉入您的代码并将其拉到前面。

private void ItemsControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        TestWindow window = new TestWindow();

        window.Show();
        window.Topmost = true;

    }

这是你要找的吗?