Почему WPF ScrollViewer вызывает открытие окна за главным окном? - PullRequest
1 голос
/ 12 августа 2010

У меня есть элемент управления в моем окне, и когда он дважды щелкнул, я хочу открыть второе окно. Моя проблема в том, что, если элемент управления обернут в просмотрщик прокрутки, новое окно появляется позади основного окна, а не перед ним. Если закомментировать средство просмотра прокрутки в этом коде, окно откроется впереди, как и предполагалось.

Что здесь происходит?


Окно 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 ]

2 голосов
/ 13 августа 2010

Вы пытались сообщить MouseButtonEventArgs, что обрабатывали его? ScrollViewer, скорее всего, пытается сфокусироваться или сделать что-то еще, когда вы дважды щелкаете внутри него, после чего окно снова становится активным после открытия другого окна.

private void ItemsControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        e.handled = true;
        TestWindow window = new TestWindow();
        window.Show();
    }
0 голосов
/ 12 августа 2010

Я вытащил ваш код и заставил его тянуть вперед, если я установил TopMost равным true.

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

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

    }

Это то, что вы ищете?

0 голосов
/ 12 августа 2010

Не уверен ... но проблема исправляется, если вы удаляете прокручиватель и вместо этого используете:

<ItemsControl ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...