有没有办法选择 COMBOBOX 的内容进行复制/粘贴?

Posted

技术标签:

【中文标题】有没有办法选择 COMBOBOX 的内容进行复制/粘贴?【英文标题】:Is there a way to select the contents of COMBOBOX for copy/paste? 【发布时间】:2021-12-27 06:46:01 【问题描述】:

问题:所以我的应用程序有 2 个选项,加载和更新。当我想更新时,我也想复制内容(如名称/UID),但我不能。在更新期间,我设置了“isEnabled=False”(通过将其绑定到变量)它不会让我复制内容。

我尝试执行“isReadOnly=True”(删除“isEnabled”属性),它允许我复制,但 DropDown 仍在工作,这将允许我或任何人更改某些值,(如性别、UID)在更新期间更改。

目标:我希望能够复制组合框的内容,但不让任何人更改其值。

有没有办法禁用下拉功能,以便“isReadOnly=True”可以解决问题。

【问题讨论】:

即使组合被禁用,您也应该能够Clipboard.SetText(combo.Text);。 - 你实际上想用这个更新过程做什么? “复制内容”是什么意思?在执行此过程时,您点击/按下了哪些内容? 对于更新过程,我会让用户更改地址,但不能更改他的名字。我有相同的加载和更新窗口,所以当它更新时,名称和 UID 的组合框“isEnabled 设置为 false”,同时让您更改地址。 用于“复制内容”。我的意思是,从鼠标中选择,按 ctrl + C 进行复制,等等。对于我可以做的文本框,但使用组合框,我不能。 听起来你应该把一个文本框和一个组合框放在同一个地方,并根据它是加载还是更新来显示一个或另一个。或者如果用户打开它,但我会使用只读文本框而不是组合 @AniAxe 是你设置 ComboBoxName.MaxDropDownHeight = 0;而使只读真正的用户将无法更改该值,并在您需要时将其还原?或 IsHitTestVisible="False" 可能对您有用 【参考方案1】:

如果isReadOnly=True 正在做你想做的事,那么我将使用转换器来禁用下拉菜单。

MainWindow.xaml:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApp1">
    <Window.Resources>
        <local:CBMaxDropDownHeightConverter x:Key="CBMaxDropDownHeightConverter" />
    </Window.Resources>
    <Grid>
        <ComboBox MaxDropDownHeight="Binding RelativeSource=RelativeSource Self, Path=IsReadOnly, Converter=StaticResource CBMaxDropDownHeightConverter" />
    </Grid>
</Window>

然后在CBMaxDropDownHeightConverter.cs

using System;
using System.Windows.Data;

namespace WpfApp1

    public class CBMaxDropDownHeightConverter : IValueConverter
    
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        
            if (System.Convert.ToBoolean(value) == true)
            
                return "0";
            

            return "Auto";
        

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        
            throw new NotSupportedException();
        
    

【讨论】:

以上是关于有没有办法选择 COMBOBOX 的内容进行复制/粘贴?的主要内容,如果未能解决你的问题,请参考以下文章

具有在 XAML 中定义的选项的数据绑定 WPF ComboBox?

解决QML开发中ComboBox中一个已选择项没有清除的问题

C#如何获取comboBox所选的文本内容

如何控制复制到剪贴板的文本

组合框中的唯一值

焦点时DataGridView ComboBox不保存