我正在为一个应用程序实现Key Navigation,而当Combo Box集中在一起时,我想覆盖空格键功能,使其像一个Enter键;喜欢这个:
if (!cb.IsDropDownOpen) { cb.IsDropDownOpen = true; } else { cb.SelectedItem = cb.{non-public member HighlightedItem}; cb.IsDropDownOpen = false; }
问题是我需要获取非公开成员的价值,以便我可以设置所选择的值并关闭下拉菜单(如何正常工作).
现在的问题是:实现这一目标最快捷,最轻松的方式是什么?
解决方法
您必须使用反射来获取属性的值
PropertyInfo highlightedItemProperty = cb.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "HighlightedItem"); object highlightedItemValue = highlightedItemProperty.GetValue(cb,null);
要浏览所有属性或字段,请查看
var allProps = cb.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).OrderBy(pi => pi.Name).ToList(); var allFields = cb.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).OrderBy(pi => pi.Name).ToList();
(您可以在调试器中阅读它们)