我厌倦了Windows Forms ...我就是这样。我不是想开始辩论,我对此感到厌倦。不幸的是,我们已经依赖于DevExpress XtraEditors中的4个控件。 I
对他们只有困难,我想继续前进。
我现在需要的是我正在使用的4个控件的壁橱替换件。他们在这里:
LookUpEdit
- 这是combobox
,可在您键入时过滤下拉列表。
MemoExEdit
- 这是textbox
,当它有焦点时“弹出”更大的区域
CheckedComboBoxEdit
- 这是checkboxes
的下拉列表。
CheckedListBoxControl
- 这是一个很好的圆柱listbox
checkboxes
这是一个有大量数据输入的LOB应用程序。实际上,前两个很好,但不是必需的。第二个是必不可少的,因为我要么需要复制功能,要么改变用户与特定数据交互的方式。
我正在寻找帮助,使用现有控件( codeplex等)或直接WPF
在 XAML
环境中复制这些内容。任何代码或方向都会受到高度赞赏,但主要是我希望避免任何商业第三方WPF,而是希望专注于自己构建它们(但我需要方向)或使用Codeplex
答案 0 :(得分:9)
WPF的一个美妙之处是自定义控件是多么容易(特别是与WinForms相比时)。根据您给出的描述,所有这些控件都可以使用标准工具箱控件非常简单地创建;我认为您不需要购买任何第三方解决方案。从顶部开始:
LookUpEdit
- 你可以使用WPF组合框免费获得这个MemoExEdit
- 使用标准TextBox
控件和Popup
原语,您可以用相对较少的努力复制此效果CheckedComboBoxEdit
- WPF ComboBox
是ItemsControl
,这意味着它支持自定义项模板。您可以使用几行XAML轻松完成此操作。CheckedListBoxControl
- 对于ListBox
同样的事情,使用ItemTemplate
属性,您可以立即执行此操作。以下是如何实现类似于CheckedComboBoxEdit
的控件的快速示例。首先,代码隐藏:
public partial class CustomControls : Window
{
public ObservableCollection<CustomItem> Items
{
get;
set;
}
public CustomControls()
{
Items = new ObservableCollection<CustomItem>();
Items.Add(new CustomItem() { Name = "Item 1", Checked = true });
Items.Add(new CustomItem() { Name = "Item 2", Checked = false });
Items.Add(new CustomItem() { Name = "Item 3", Checked = false });
InitializeComponent();
}
}
public class CustomItem
{
public bool Checked
{
get;
set;
}
public string Name
{
get;
set;
}
}
现在,Window
:
<Window x:Class="TestWpfApplication.CustomControls"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CustomControls" Height="200" Width="200"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<ComboBox ItemsSource="{Binding Items}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Width="100">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}"
IsChecked="{Binding Checked}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
ItemTemplate
属性所说的是,“对于此控件中的每个项目,请将其中的一个作为其中之一。”因此,对于Items
的{{1}}集合中的每个项目,都会生成ComboBox
,其CheckBox
绑定到项目类的Content
属性,及其Name
属性绑定到IsChecked
属性。
这是最终结果:
alt text http://img155.imageshack.us/img155/9379/customcontrols.png