摘要:public bool IsClose{get { return (bool)GetValue(IsCloseProperty); }set { SetValue(IsCloseProperty, value); }}public static readonl
Tag 标签控件:实现 MultiSelectComboBox 选中项的标签展示
控件名:Tag
作 者:WPFDevelopersOrg - 驚鏵
原文链接[1]:https://github.com/WPFDevelopersOrg/WPFDevelopers
码云链接[2]:https://gitee.com/WPFDevelopersOrg/WPFDevelopers
框架支持.NET4 至 .NET8;
Visual Studio 2022;
接着增强 MultiSelectComboBox 带 Tag 显示和搜索功能的多选控件选中项的标签展示。
欢迎各位开发者下载并体验。如果在使用过程中遇到任何问题,欢迎随时向我们反馈[3]创建一个Tag控件继承ContentControl可以在Tag控件中灵活地插入内容(如文本、图标等),从而使其可以展示任意类型的信息。1. Tag控件显示关闭按钮为 Tag标签添加了一个IsClose属性。这个属性用于控制标签是否显示关闭按钮。
IsClose默认值true,显示关闭按钮。为false隐藏关闭按钮。
public bool IsClose{
get { return (bool)GetValue(IsCloseProperty); }
set { SetValue(IsCloseProperty, value); }
}
public static readonly DependencyProperty IsCloseProperty =
DependencyProperty.Register("IsClose", typeof(bool), typeof(Tag), new PropertyMetadata(true));
2.关闭事件与命令
定义了一个 CloseEvent和CloseCommand,控件能够响应关闭操作。当点击关闭按钮时,将触发Close事件。
CloseEvent是一个RoutedEvent处理关闭。RoutingStrategy.Bubble冒泡事件。
CloseCommand是一个RoutedCommand,定义了Tag控件的关闭命令,并通过CommandBinding与OnCloseExecuted方法绑定。
public event RoutedEventHandler Close{
add { AddHandler(CloseEvent, value); }
remove { RemoveHandler(CloseEvent, value); }
}
public static readonly RoutedEvent CloseEvent =
EventManager.RegisterRoutedEvent("Close", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Tag));
public static RoutedCommand CloseCommand
{
get { return _closeCommand; }
}
3.处理关闭命令
在 OnCloseExecuted中,判断sender是否为Tag,如果是,调用OnClose方法。
OnClose方法触发CloseEvent,通知执行关闭Tag操作。
private static void OnCloseExecuted(object sender, ExecutedRoutedEventArgs e){
if (sender is Tag tag)
tag.OnClose;
}
protected virtual void OnClose
{
var args = new RoutedEventArgs(CloseEvent, this);
RaiseEvent(args);
}
4. Tag.xaml样式代码
外层 Border控件包裹了Tag控件。
使用 Grid布局,分为两列:
第一列显示 ContentPresenter,显示Tag的内容。
第二列是关闭按钮(PART_CloseButton),位于Tag的右侧。
Button关闭按钮,当点击时触发Tag.CloseCommand,并通过命令删除该Tag。
在关闭按钮中,使用PathIcon显示关闭图标。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:WPFDevelopers.Controls"
xmlns:helpers="clr-namespace:WPFDevelopers.Helpers"
xmlns:resx="clr-namespace:WPFDevelopers">
来源:opendotnet