编程语言:c#[9.0]
项目类型:WPF(.Net5)
需求场景:ListBox做消息框,想把显示的某段消息复制下来使用;
1.后台代码如下:
////// [ public static class ListBoxBehaviour { #region AllowCopy ///]的附加行为类 /// /// 依赖属性:是否允许复制 /// public static readonly DependencyProperty AllowCopyProperty = DependencyProperty.RegisterAttached("AllowCopy", typeof(bool), typeof(ListBoxBehaviour) , new UIPropertyMetadata(false, _OnAllowCopyChanged)); ////// Get: /// 依赖属性 ////// public static bool GetAllowCopy(DependencyObject d) { return (bool)d.GetValue(AllowCopyProperty); } /// /// Set: /// 依赖属性 /// 属性值 public static void SetAllowCopy(DependencyObject d, bool value) { d.SetValue(AllowCopyProperty, value); } ////// /// 当[ /// /// private static void _OnAllowCopyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is not ListBox _listBox) { return; } const string C_CMD_NAME = "AllowCopy"; switch ((bool)e.NewValue) { case true: { void _cmdHandler(object sender, ExecutedRoutedEventArgs _e) { if (_listBox.SelectedItem == null) { return; } //Copy what ever your want here Clipboard.SetDataObject(_listBox.SelectedItem.ToString()); } var _command = new RoutedCommand(C_CMD_NAME, typeof(ListBox)); _command.InputGestures.Add(new KeyGesture(Key.C, ModifierKeys.Control, "Copy")); _listBox.CommandBindings.Add(new CommandBinding(_command, _cmdHandler)); } break; case false: { for (int i = 0; i < _listBox.CommandBindings.Count; i++) { var cb = _listBox.CommandBindings[i]; if (cb.Command is RoutedCommand _routedCmd) { if (_routedCmd.Name == C_CMD_NAME) { _listBox.CommandBindings.RemoveAt(i); break; } } } } break; } } #endregion }]发生改变时的处理 ///
2.使用方式如下:


![[WPF][.Net5]ListBox的复制文本功能 [WPF][.Net5]ListBox的复制文本功能](http://www.mshxw.com/aiimages/31/954283.png)
