2010-08-12 5 views
1

J'ai un contrôle des éléments sur ma fenêtre et quand il est double-cliqué je veux ouvrir une seconde fenêtre. Mon problème est que si le contrôle des éléments est enveloppé dans une visionneuse de défilement, la nouvelle fenêtre apparaît derrière la fenêtre principale au lieu de devant elle. Si commentez la visionneuse de défilement dans ce code, la fenêtre s'ouvre à l'avant comme prévu.Pourquoi WPF ScrollViewer provoque l'ouverture de la fenêtre derrière la fenêtre principale?

Que se passe-t-il ici?


fenêtre 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> 

code Derrière:

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

Répondre

0

Je ne sais pas ... mais la question ne se fixe si vous retirez votre ScrollViewer et utiliser à la place:

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

Oui et non. La fenêtre apparaît à l'avant comme à son habitude, mais le contenu ne défile pas –

+1

En utilisant cette approche, avez-vous essayé de contraindre explicitement la hauteur/largeur de la grille? – Ragepotato

-1

J'ai tiré dans votre code et l'ai obtenu à tirer vers l'avant si je mets le TopMost égal à vrai.

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

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

    } 

Est-ce ce que vous cherchez?

+0

Désolé, j'étais dans l'état d'esprit Silverlight :( – JSprang

+0

Edited answer for WPF – JSprang

2

Avez-vous essayé de dire à MouseButtonEventArgs que vous l'avez manipulé? Le ScrollViewer tente très probablement de se concentrer ou de faire autre chose lorsque vous double-cliquez dessus, ce qui fait que la fenêtre redevient active après l'ouverture de l'autre fenêtre.

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

Cela devrait être la réponse acceptée, ne modifie pas le code de toute façon. –

Questions connexes