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