如何始终在 WPF 中将弹出窗口放置在一个 ToggleButton 下方

16 浏览
0 Comments

如何始终在 WPF 中将弹出窗口放置在一个 ToggleButton 下方

当我点击开关按钮时,我想在其下方放置一个弹出窗口。在这个弹出窗口中,我想添加按钮和其他控件。但是,我如何确保无论我调整主窗口大小,弹出窗口始终在开关按钮下方显示。

我的XAML代码:

     
        
            
            
            
        
        
            
        
    
    
        
            
            
        
    

点击开关按钮的C#代码:

    private void UserBtn_Click(object sender, RoutedEventArgs e)
    {
        // 获取位置和发送者
        var element = (System.Windows.Controls.Primitives.ToggleButton)sender;
        var location = element.PointToScreen(new Point(0, 0));
        // 设置弹出窗口位置
        UserMenuPopUp.HorizontalOffset = (location.X);
        UserMenuPopUp.VerticalOffset = (location.Y);
        UserMenuPopUp.IsOpen = true;
    }

0
0 Comments

问题的原因是Popup在窗口被移动时不会跟随移动。解决方法是使用Placement和PlacementTarget属性来确定Popup的位置,并将IsOpen属性绑定到ToggleButton的IsChecked属性上,同时设置StaysOpen为False,这样当按钮被切换时,Popup会自动关闭。如果想要Popup始终保持打开状态,可以参考链接Move a WPF Popup中的解决方案。不再需要C#代码,因为Popup已经与ToggleButton的IsChecked属性绑定。需要注意的是,如果在C#代码中显式地要求打开Popup,则绑定将会断开。

0