我继承了一个使用RadioButtonList
的项目,它从ListBox
继承。它已经从Web上删除了(目前找不到链接),包含RadioButtonList.cs(其中包含六个依赖属性)和RadioButtonList.xaml(仅为样式和控件模板)。
这个控件在100多个地方使用。它会带来问题,因为它不是完整的和专业的控件。会出现问题,例如焦点问题、键盘导航等。(请参阅评论。)
在过去几年中,经过多次研究,似乎这个控件实际上并不必要。需要做的只是在一组单选按钮上设置GroupName
属性。而且,使用RadioButtonList
控件的唯一原因是通过继承的ListBox
帮助数据绑定选项列表。
1)这个控件真的必要吗?有更好的方法吗?
- 如果您只需要一个单选按钮列表,则不需要此控件。
- 如果您的应用程序使用多个单选按钮列表,则需要此控件。
- 如果您在不同的应用程序中使用单选按钮列表,则可能需要此控件。
1b) 是否有更好的方法?
- 我认为从
ListBox
、ItemsControl
等派生,然后创建样式和模板是创建此控件的唯一方法;因此,没有更好的方法。
2)是否有专业控件(开源或其他),可以让我享受数据绑定的好处而不会带来问题?(我们使用Infragistics和DevExpress,但我不熟悉这些套件提供的所有控件。)
- 肯定有,就是使用
ListBoxEdit
和RadioListBoxEditStyleSettings
。
回答说明
所有答案都表明创建一个RadioButtonList
控件是不必要的。然而,如果您需要多个单选按钮列表,当您创建样式、控件模板和数据模板时,您最终会得到一系列可以称为单选按钮列表控件的代码工件集合。因此,在我看来,RadioButtonList
是必需的。此外,我的理解是,一个
RadioButtonList
在早期的 WPF CTP 中被删除了。这是可以理解的,因为这种很容易创建的控件的需求有限。关于已接受的答案的评论:
有一个专业控件 -
ListBoxEdit
与 RadioListBoxEditStyleSettings
。最后对 Mike Strobel 的回答进行评论:
我拥有的
RadioButtonList
就是他回答的结果。虽然我擅长创建自定义控件,但我更愿意让 Infragistics 和 DevExpress 等第三方组件制造商创建和支持像这样的基本控件。
ListBoxEdit
和RadioListBoxEditStyleSettings
来表示一组单选按钮。实际上,它与您正在使用的控件几乎相同,但我认为它提供了更好的功能并经过了充分测试。DevExpress不提供RadioButton,在我的应用程序中,我使用WPF/Silverlight提供的默认RadionButton-Control。 - Jehof