2017-05-20 29 views
0

當前我正在使用WPF應用程序。在一個頁面中,我有兩個部分(例如part1 | Part2)。在部分1中,我列出了項目,當選擇任何項目I將在第2部分中獲得該項目的詳細信息。當我減小窗口頁面的大小時,我希望彈出詳細信息部分。如何實現該功能?請幫忙!在WPF中調整頁面大小時彈出一個彈出窗口

+0

是否有同時實現這一點,你所遇到的任何具體問題行爲?不起作用的代碼?否則,這種問題格式不符合SO的要求。 – Karolis

回答

0

簡單,純粹的WPF實行能像這樣工作:

查看:

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication2" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <Grid x:Name="PartOne" Grid.Column="0" Background="Red"/> 
     <Grid x:Name="PartTwoContainer" Grid.Column="1"> 
      <!--PartTwoControl is just UserControl without any special logic in it--> 
      <local:PartTwoControl x:Name="PartTwo" /> 
     </Grid> 
    </Grid> 
</Window> 

而對於它的一些邏輯:

private const int MaxXToPopup = 300; 
private Window _popup; 

public MainWindow() 
{ 
    InitializeComponent(); 
} 

protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) 
{ 
    if (ShouldDisplayInPopup()) 
    { 
     DetachPartTwo(); 
     OpenPopup(); 
    } 
    else if (ShouldDisplayInGrid()) 
    { 
     ClosePopup(); 
     ShowPartTwo(); 
    } 

    base.OnRenderSizeChanged(sizeInfo); 
} 

private void ClosePopup() 
{ 
    _popup.Content = null; 
    _popup.Close(); 
    _popup = null; 
} 

private void OpenPopup() 
{ 
    _popup = new Window {Content = PartTwo}; 
    _popup.Show(); 
} 

private void ShowPartTwo() 
{ 
    PartTwoContainer.Children.Add(PartTwo); 
} 

private void DetachPartTwo() 
{ 
    PartTwoContainer.Children.Remove(PartTwo); 
} 

private bool ShouldDisplayInGrid() 
{ 
    return _popup != null && RenderSize.Width > MaxXToPopup; 
} 

private bool ShouldDisplayInPopup() 
{ 
    return _popup == null && RenderSize.Width < MaxXToPopup; 
}