2017-05-20 1 views
0

actuellement je travaille sur l'application WPF.Dans une page, j'ai deux parties (par exemple partie1 | Partie2). Dans partie1 j'ai liste d'articles et quand je sélectionne l'un des éléments I J'obtiendrai les détails de cet article dans la partie 2. Quand je diminuerai la taille de la page de fenêtre je veux que la partie de détails soit pop up. Comment puis-je réaliser cela? S'il vous plaît aider!Faire une popup lorsque la taille de la page diminue dans WPF

+0

Y at-il problème particulier que vous rencontrez en mettant en œuvre cette comportement? Code qui ne fonctionne pas? Sinon, ce format de question ne répond pas aux exigences de SO. – Karolis

Répondre

0

simple, implemenation pur WPF pourrait fonctionner comme ceci:

Vue:

<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> 

Et une certaine logique pour elle:

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; 
}