2010-08-12 60 views
1

我有一个项目控制在我的窗口,当它双击我想打开第二个窗口。我的问题是,如果项目控件包装在滚动查看器中,则新窗口会出现在主窗口后面,而不是前面。如果在此代码中注释掉滚动查看器,窗口将按照预期打开。为什么WPF ScrollViewer导致窗口在主窗口后面打开?

这是怎么回事?


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

回答

0

不知道......但问题得到修复,如果您删除的ScrollViewer,而是使用:

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

是的,没有。窗口显示在其前面,但其内容不滚动 – 2010-08-12 19:02:46

+1

使用此方法,您是否尝试明确约束网格的高度/宽度? – Ragepotato 2010-08-12 19:24:23

-1

我拉你的代码,并得到它如果我将TopMost设置为true,则拉到前面。

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

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

    } 

这是你要找的吗?

+0

对不起,这是我在Silverlight的心态:( – JSprang 2010-08-12 20:41:53

+0

编辑WPF的答案。 – JSprang 2010-08-12 20:48:58

2

你有没有试过告诉你处理它的MouseButtonEventArgs? ScrollViewer最有可能在你双击内部时尝试对焦或做其他事情,导致窗口在另一个窗口打开后再次变为活动状态。

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

这应该是被接受的答案,不会修改代码在任何方面。伟大的东西! – 2011-03-29 21:06:58