需要更换第三方WinForm控件,什么是壁橱WPF等效?

Ref*_*din 4 .net wpf user-interface wpftoolkit wpf-controls

我厌倦了Windows Forms ......我就是这样.我不是想开始辩论,我对此感到厌倦.不幸的是,我们已经依赖于DevExpress XtraEditors中的4个控件. I他们只有困难,我想继续前进.

我现在需要的是替换壁橱将替代我正在使用的4个控制器.他们来了:

LookUpEdit- 这是在combobox您键入时过滤下拉列表的.

MemoExEdit- 这是一个textbox是"弹出"一个更大的区域,当它具有焦点

CheckedComboBoxEdit- 这是一个下拉列表checkboxes.

CheckedListBoxControl- 这是一个很好的过柱listboxcheckboxes

这是一个有大量数据输入的LOB应用程序.实际上,前两个很好,但不是必需的.第二个是必不可少的,因为我要么需要复制功能,要么改变用户与特定数据交互的方式.

我正在寻找帮助,在WPF具有现有控件(codeplex等)的环境中或直接复制这些XAML.任何代码或方向都将受到高度赞赏,但大多数我希望避免任何商业第三方WPF,而是希望专注于自己构建它们(但我需要指导)或使用Codeplex

Cha*_*lie 9

WPF的一个美妙之处是自定义控件是多么容易(特别是与WinForms相比时).根据您给出的描述,所有这些控件都可以使用标准工具箱控件非常简单地创建; 我认为您不需要购买任何第三方解决方案.从顶部开始:

  1. LookUpEdit- 你可以使用WPF组合框免费获得这个
  2. MemoExEdit- 使用标准TextBox控件和Popup基元,您可以相对较少的努力复制此效果
  3. CheckedComboBoxEdit- WPF ComboBox是一个ItemsControl,这意味着它支持自定义项模板.您可以使用几行XAML轻松完成此操作.
  4. 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,XAML用于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>
Run Code Online (Sandbox Code Playgroud)

ItemTemplate财产所说的是,"对于这个控件中的每个项目,让我成为其中之一." 因此,对于Items集合中的每个项目ComboBox,CheckBox都会生成a,其Content绑定到Nameitem类的属性,并将其IsChecked属性绑定到该Checked属性.

这是最终结果:

替代文字http://img155.imageshack.us/img155/9379/customcontrols.png