有没有办法选择 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?