2010-08-12 61 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