栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

[WPF][.Net5]ListBox的复制文本功能

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[WPF][.Net5]ListBox的复制文本功能

编程语言: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.使用方式如下:

 

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954283.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号