WPF非绑定ComboBox设置Text为"Revision"后不显示内容求助
嘿,太懂这种明明代码里设置了Text,界面却啥都不显示的憋屈了!针对你这个不可编辑ComboBox的问题,核心原因其实是WPF对不可编辑和可编辑ComboBox的Text属性处理逻辑完全不一样。
先给你拆解清楚:当ComboBox设置为IsEditable="False"(不可编辑状态)时,它的Text并不是独立的可设置文本——控件显示的内容完全依赖于当前选中的项,而且这个项必须存在于它的Items集合里。你直接给Text赋值"Revision",虽然代码里读取Text能拿到这个值,但界面上根本不会渲染,因为没有对应的选中项匹配它。
下面给你几个针对性的解决方案,按需选就行:
方案1:把"Revision"加入Items并选中它
这是最符合不可编辑ComboBox设计逻辑的做法:
// 假设你的目标ComboBox名叫targetComboBox // 先检查"Revision"是否已经在Items里,避免重复添加 if (!targetComboBox.Items.Contains("Revision")) { targetComboBox.Items.Add("Revision"); } // 选中这个项,界面就会显示"Revision"了 targetComboBox.SelectedItem = "Revision"; // 也可以用索引来选,如果你知道它在Items里的位置 // targetComboBox.SelectedIndex = targetComboBox.Items.IndexOf("Revision");
方案2:检查XML数据源是否包含目标值
你是通过foreach从XML填充控件的,那得先确认XML数据源里有没有"Revision"这个值。如果XML里根本没这个内容,直接给ComboBox的Text赋值肯定白搭——不可编辑ComboBox只认自己Items集合里的项。
方案3:换一种“不可编辑”的实现方式(支持显示任意文本)
如果你只是想让控件看起来不可编辑,但需要显示不在Items里的固定文本,那可以把ComboBox设为可编辑但只读:
targetComboBox.IsEditable = true; targetComboBox.IsReadOnly = true; targetComboBox.Text = "Revision";
这种设置下,控件看起来和不可编辑状态一样(不能输入),但可以直接设置Text显示任意内容,不需要依赖Items集合。
最后再提个醒:别搞混IsEditable和IsReadOnly的区别——IsEditable="False"才是真正的不可编辑(连下拉都只能选已有项),而IsReadOnly="True"是针对可编辑状态的,用来防止用户输入,但还是能下拉选项。
内容的提问来源于stack exchange,提问作者Mike

