using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Input;
using System.Linq;
namespace ComboBoxes;
public sealed partial class MainPage : Page
{
public MainPage()
{
InitializeComponent();
Loaded += MainPage_Loaded;
}
private object? SelectedItemWhenPopupOpened { get; set; }
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
if (this.ComboBoxControl.FindChildrenOfType<Popup>()?.FirstOrDefault() is Popup popup)
{
popup.Opened += Popup_Opened;
}
}
private void Popup_Opened(object? sender, object e)
{
SelectedItemWhenPopupOpened = this.ComboBoxControl.SelectedItem;
}
private void ComboBoxItem_Tapped(object sender, TappedRoutedEventArgs e)
{
if (sender.Equals(SelectedItemWhenPopupOpened) is true)
{
this.ComboBoxControl.SelectedIndex = -1;
this.ComboBoxControl.Text = "";
}
}
}
副档名.cs
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml;
using System.Collections.Generic;
namespace ComboBoxes;
public static class Extensions
{
public static IEnumerable<T> FindChildrenOfType<T>(this DependencyObject parent) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (child is T childOfT)
{
yield return childOfT;
}
foreach (T grandChild in child.FindChildrenOfType<T>())
{
yield return grandChild;
}
}
if (parent is ContentControl contentControl)
{
if (contentControl.Content is T contentOfT)
{
yield return contentOfT;
}
if (contentControl.Content is DependencyObject dependencyObjectContent)
{
foreach (T grandChild in dependencyObjectContent.FindChildrenOfType<T>())
{
yield return grandChild;
}
}
}
}
}
2条答案
按热度按时间lp0sw83n1#
试试这个办法:
主页.xaml
主页面.xaml.cs
副档名.cs
cngwdvgl2#
主页. xaml.cs