本文介绍了在用户控件WPF中关闭弹出窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 你好朋友 我有一个用户控件(UReceipt.xaml),弹出窗口打开。弹出窗口是用户控件(USearch.xaml)(包括一个列表视图和几个按钮)。 现在我想双击弹出窗口列表视图中的行并关闭用户控件。然后返回控制用户(UReceipt.xaml ) 请指导我 谢谢。 我尝试过: < Popup x:Name =ppPlacement =Center> < local:usearch>Hello friendsI have a user control (UReceipt.xaml),in which a pop-up opens.Inside the pop-up is the user control(USearch.xaml) (which includes a list view and several buttons).Now I want to double-click on the row in the list view of pop-ups and close the user control.And go back to the control user(UReceipt.xaml)please guide meThank you.What I have tried:<Popup x:Name="pp" Placement="Center" > <local:usearch>推荐答案<UserControl x:Class="Popup.UReceipt" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Popup"> <Grid> <Button HorizontalAlignment="Center" VerticalAlignment="Center" Padding="10 5" Click="Button_Click"> <Button.Content> <Grid> <TextBlock Text="Click Me"/> <Popup IsOpen="{Binding ShowPopup}" StaysOpen="False"> <local:USearch x:Name="Search"/> </Popup> </Grid> </Button.Content> </Button> </Grid></UserControl> UReceipt - 代码隐藏UReceipt - Code-behindpublic partial class UReceipt : UserControl, INotifyPropertyChanged{ public UReceipt() { InitializeComponent(); DataContext = this; } public event PropertyChangedEventHandler PropertyChanged; private bool showPopup; public bool ShowPopup { get { return showPopup; } set { showPopup = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ShowPopup))); } } private void Button_Click(object sender, RoutedEventArgs e) { ShowPopup = true; }} USearch - XAMLUSearch - XAML<UserControl x:Class="Popup.USearch" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Width="100" Height="200" Background="AliceBlue"> <TextBlock Text="Search"/> <Button Content="CLOSE" Padding="10 5" Click="Button_Click" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid></UserControl> USearch - 代码隐藏USearch - Code-behindpublic partial class USearch : UserControl{ public USearch() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { (DataContext as UReceipt).ShowPopup = false; e.Handled = true; }} 2.将 UReceipt 的引用传递给 USearch : UReceipt - XAML2. Passing a reference of UReceipt to USearch:UReceipt - XAML<UserControl x:Class="Popup.UReceipt" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Popup"> <Grid> <Button HorizontalAlignment="Center" VerticalAlignment="Center" Padding="10 5" Click="Button_Click"> <Button.Content> <Grid> <TextBlock Text="Click Me"/> <Popup x:Name="SearchPopup" StaysOpen="False"> <local:USearch x:Name="Search"/> </Popup> </Grid> </Button.Content> </Button> </Grid></UserControl> UReceipt - 代码隐藏UReceipt - Code-behindpublic partial class UReceipt : UserControl{ public UReceipt() { InitializeComponent(); Search.Host = this; } private void Button_Click(object sender, RoutedEventArgs e) { SearchPopup.IsOpen = true; }} USearch - XAMLUSearch - XAML<UserControl x:Class="Popup.USearch" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Width="100" Height="200" Background="AliceBlue"> <TextBlock Text="Search"/> <Button Content="CLOSE" Padding="10 5" Click="Button_Click" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid></UserControl> USearch - 代码隐藏USearch - Code-behindpublic partial class USearch : UserControl{ public USearch() { InitializeComponent(); } private UReceipt host; public UReceipt Host { set { host = value; } } private void Button_Click(object sender, RoutedEventArgs e) { host.SearchPopup.IsOpen = false; e.Handled = true; }} 3. Visual Parent reference: UReceipt - XAML3. Visual Parent reference:UReceipt - XAML<UserControl x:Class="Popup.UReceipt" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Popup"> <Grid> <Button HorizontalAlignment="Center" VerticalAlignment="Center" Padding="10 5" Click="Button_Click"> <Button.Content> <Grid> <TextBlock Text="Click Me"/> <Popup x:Name="SearchPopup" StaysOpen="False"> <local:USearch x:Name="Search"/> </Popup> </Grid> </Button.Content> </Button> </Grid></UserControl> UReceipt - Code-behindUReceipt - Code-behindpublic partial class UReceipt : UserControl{ public UReceipt() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { SearchPopup.IsOpen = true; }} USearch - XAMLUSearch - XAML<UserControl x:Class="Popup.USearch" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Width="100" Height="200" Background="AliceBlue"> <TextBlock Text="Search"/> <Button Content="CLOSE" Padding="10 5" Click="Button_Click" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid></UserControl> USearch - Code-behindUSearch - Code-behindpublic partial class USearch : UserControl{ public USearch() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { this.GetVisualParent<Popup>().IsOpen = false; e.Handled = true; }} Helper ExtensionHelper Extensionpublic static class ParentOfTypeExtensions{ public static T ParentOfType<T>(this DependencyObject element) where T : DependencyObject { if (element == null) return null; return element.GetParents().OfType<T>().FirstOrDefault(); } public static T GetVisualParent<T>(this DependencyObject element) where T : DependencyObject { return element.ParentOfType<T>(); } public static T GetParent<T>(this DependencyObject element) where T : FrameworkElement { return element.ParentOfType<T>(); } public static IEnumerable<DependencyObject> GetParents(this DependencyObject element) { if (element == null) throw new ArgumentNullException("element"); while ((element = element.GetParent()) != null) yield return element; } public static DependencyObject GetParent(this DependencyObject element) { DependencyObject parent = null; try { parent = VisualTreeHelper.GetParent(element); } catch (InvalidOperationException) { parent = null; } if (parent == null) { if (element is FrameworkElement frameworkElement) parent = frameworkElement.Parent; if (element is FrameworkContentElement frameworkContentElement) parent = frameworkContentElement.Parent; } return parent; }} 这篇关于在用户控件WPF中关闭弹出窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
07-07 01:07