C# 当WPF中的页面大小减小时弹出窗口

C# 当WPF中的页面大小减小时弹出窗口,c#,wpf,mvvm-light,C#,Wpf,Mvvm Light,目前我正在开发WPF应用程序。在一个页面中,我有两个部分(例如part1 | Part2)。在part1中,我有项目列表,当我选择任何项目时,我将在Part2中获得该项目的详细信息。当我减小窗口页面的大小时,我希望该详细信息部分弹出。我如何实现这一点?请帮忙 简单、纯粹的WPF实现可以像这样工作: 视图: 还有一些逻辑: private const int MaxXToPopup = 300; private Window _popup; public MainWindow() {

目前我正在开发WPF应用程序。在一个页面中,我有两个部分(例如part1 | Part2)。在part1中,我有项目列表,当我选择任何项目时,我将在Part2中获得该项目的详细信息。当我减小窗口页面的大小时,我希望该详细信息部分弹出。我如何实现这一点?请帮忙

简单、纯粹的WPF实现可以像这样工作:

视图:


还有一些逻辑:

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;
}
private const int MaxXToPopup=300;
私人窗口弹出窗口;
公共主窗口()
{
初始化组件();
}
受保护的覆盖无效OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
if(ShouldDisplayInPopup())
{
第二部分();
OpenPopup();
}
else if(ShouldDisplayInGrid())
{
ClosePopup();
showPart2();
}
base.OnRenderSizeChanged(sizeInfo);
}
私有void ClosePopup()
{
_popup.Content=null;
_popup.Close();
_弹出=空;
}
私有void OpenPopup()
{
_弹出=新窗口{Content=PartTwo};
_popup.Show();
}
第二部分()
{
PartTwoContainer.Children.Add(PartTwo);
}
第二部分()
{
PartTwoContainer.Children.Remove(PartTwo);
}
private bool should displayingrid()
{
返回_popup!=null&&RenderSize.Width>maxxtopoppup;
}
private bool ShouldDisplayInPopup()
{
return _popup==null&&RenderSize.Width
在实施此行为时,您是否遇到任何特殊问题?不起作用的代码?否则,此问题格式不符合SO要求。
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;
}