.net - 需要更换第 3 方 WinForm 控件,壁橱 WPF 等效项是什么?

标签 .net wpf user-interface wpf-controls wpftoolkit

我厌倦了 Windows 窗体......我只是。我不想就此展开辩论,我只是对此感到厌烦。不幸的是,我们已经依赖于 DevExpress XtraEditors 中的 4 个控件。 I 和他们一起遇到了困难,我想继续前进。

我现在需要的是我正在使用的 4 个控件的壁橱更换。他们来了:
LookUpEdit - 这是一个 combobox在您键入时过滤下拉列表。
MemoExEdit - 这是一个 textbox当它有焦点时“弹出”一个更大的区域
CheckedComboBoxEdit - 这是 checkboxes 的下拉列表.
CheckedListBoxControl - 这是一个很好的专栏 listboxcheckboxes
这是一个具有大量数据输入的 LOB 应用程序。实际上,前两个很好,但不是必需的。后两个是必不可少的,因为我需要复制功能或更改用户与特定数据交互的方式。

我正在寻求帮助以在 中复制这些内容。 WPF 具有现有控件(codeplex 等)或直接 XAML 的环境.任何代码或方向将不胜感激,但主要是我希望避免任何商业 3rd 方 WPF,而是希望专注于自己构建它们(但我需要方向)或使用 Codeplex

最佳答案

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

  • LookUpEdit - 您可以使用 WPF 组合框
  • 免费获得此功能
  • MemoExEdit - 使用标准 TextBox控制和Popup原始的,你可以用相对较少的努力复制这个效果
  • CheckedComboBoxEdit - WPF ComboBoxItemsControl ,这意味着它支持自定义项目模板。您可以使用几行 XAML 轻松完成此操作。
  • CheckedListBoxControl - ListBox 也是如此, 使用 ItemTemplate属性(property),您可以立即进行。

  • 下面是一个快速示例,说明如何实现类似于 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 的 XAML :
    <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 中的每个项目ComboBox 的集合, 一个 CheckBox生成,其Content绑定(bind)到 Name您的项目类别的属性及其 IsChecked绑定(bind)到 Checked 的属性属性(property)。

    这是最终结果:

    alt text http://img155.imageshack.us/img155/9379/customcontrols.png

    关于.net - 需要更换第 3 方 WinForm 控件,壁橱 WPF 等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724137/

    相关文章:

    javascript - 计时器 - Angular 8 的计时器

    c# - Task.Run 中的动态

    .net - 使用 jsonp 和基于 SSL/HTTPS 的 .NET Web 服务进行跨域 AJAX

    c# - 如果使用 Enterprise Library,log4net 是否更适合登录?

    c# - 无法加载反序列化所需的类型

    c# - 将 CheckBox IsChecked 属性绑定(bind)到 ListView 的 SelectedItems 属性

    wpf - 选择 ListBoxItem 时,如何将焦点设置到 ItemTemplate 中的控件?

    wpf DataGrid.RowValidationErrorTemplate - 如何实际更改行外观而不是标题行?

    winforms - 你如何处理 Winforms 中临时无用的控件(隐藏与禁用)?

    java - 如何在 Swing 中创建通知