2016-05-26 7 views
0

多くのコードがあります。しかし、問題があります: 私はDataTemplateのようコントロールとリストボックスを持っている:WPFメインウィンドウは常に他のウィンドウの上にあります

private void Concert_DoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     Control control = sender as Control; 
     Concert concert = control.DataContext as Concert; 

     ConcertView wndw = new ConcertView(concert.ConcertID); 

     wndw.Show(); 
    } 

そしてConcertViewウィンドウが開くが、ちょうど私のメインウィンドウの下にされています

<ListBox x:Name="UpcomingConcertsList" ItemsSource="{Binding UpcomingConcerts}" HorizontalAlignment="Left" Height="350" Margin="10,208,0,0" VerticalAlignment="Top" Width="370"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Control MouseDoubleClick="UpcomingConcert_DoubleClick"> 
        <Control.Template> 
         <ControlTemplate> 
          <Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="4" Width="320"> 
           <Grid Margin="3"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="100"/> 
             <ColumnDefinition/> 
            </Grid.ColumnDefinitions> 
            <Image Grid.RowSpan="2" Width="100" Height="75" Margin="6" Source="{Binding ImageURL}"/> 
            <StackPanel Grid.Column="1" Margin="2,6"> 
             <TextBlock FontWeight="Bold" Text="{Binding Name}"/> 
             <TextBlock Text="{Binding Date, StringFormat={}{0:g}}"/> 
             <TextBlock Text="{Binding Bands, Converter={StaticResource BandsConverter}}"/> 
            </StackPanel> 
           </Grid> 
          </Border> 
         </ControlTemplate> 
        </Control.Template> 
       </Control> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

とすると、イベントの背後にあるコードをクリックしてください。 wndw.Activate()、wndw.Focus()は役に立ちません。 私はこれをやろうとしました。この後、IsEnabled = falseとwndw.Show()。その後、私のConcertViewはMainWindowの上にありました。しかし、このように.IsEnabledが真実になると、ConcertViewは突然下に行きます。

その他のアイデアはありますか?

+0

'wndw.TopMost = true;'を試しましたか? – ViVi

+0

@ vishakh369はい私は試しました。もちろん、私のwndwはすべてのウィンドウの上になります。しかし、TopMostは、私のウィンドウがすべてのアプリケーション上にあるようにします。しかし、私はMainWindowの上に現れるように私のConcertVIewが必要です。私はまた、wndw.TopMost = trueとwndw.TopMost = false Thread.Sleep(x)の後に(睡眠はちょうどそれが正常に動作するかどうかを確認するためです) - 私のwndwはMainWindowの下に得た後に得た – utkillr

+0

私は私の返信を投稿していますそれはあまりにも長く、コードを含んでいるからです。とにかく私はそれがうまくいくと思う。 – ViVi

答えて

0

しかし、TopMostはすべてのアプリケーション上にウィンドウを表示させますこれはどういう意味ですか?あなたは現在アプリケーションを使用しています。ボタンをクリックすると、新しいウィンドウが読み込まれます。だから、新しいウィンドウが一番上に来るようにしたいのですか?

ウィンドウのプロパティオーナーのプロパティを設定して、所有者を設定できます。 MainWindowです。 に設定すると、現在のウィンドウはオーナーウィンドウになります。

Window ownedWindow = new Window(); 
ownedWindow.Owner = this; 
ownedWindow.Show(); 

wndw.TopMost = true;を設定しようとすると、その作業をかどうかを確認します。

関連する問題