【问题标题】:Need to replace 3rd party WinForm controls, what's the closet WPF equivalent?需要更换第 3 方 WinForm 控件,壁橱 WPF 等效项是什么?
【发布时间】:2011-02-13 00:38:27
【问题描述】:

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

我现在需要的是我正在使用的 4 个控件的壁橱更换。他们在这里:

LookUpEdit - 这是一个combobox,可在您键入时过滤下拉列表。

MemoExEdit - 这是一个textbox,当它获得焦点时会“弹出”更大的区域

CheckedComboBoxEdit - 这是checkboxes 的下拉列表。

CheckedListBoxControl - 这是listbox 中的一个很好的专栏checkboxes

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1. LookUpEdit- 您可以使用 WPF 组合框免费获得此功能
    2. MemoExEdit- 使用标准的 TextBox 控件和 Popup 原语,您可以轻松复制此效果
    3. CheckedComboBoxEdit- WPF ComboBoxItemsControl,这意味着它支持自定义项模板。您可以使用几行 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;
        }
    }
    

    现在,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 属性的意思是,“对于此控件中的每个项目,让我成为其中之一。”因此,对于ComboBoxItems 集合中的每个项目,都会生成一个CheckBox,其Content 绑定到项目类的Name 属性,其IsChecked 属性绑定到@ 987654343@财产。

    这是最终结果:

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

    【讨论】:

    • 真的,哇,这太不可思议了...Item Templates 是我经常看到的东西,看来我应该研究一下。我将不得不谷歌周围。我猜你就是用它来创建所有这些“复合”控件?
    • 因为 WPF 具有动态内容模型(可以说您可以在几乎任何地方填充任何类型的内容),复合控件是它擅长的一个领域。是的,项目模板就是其中之一实现这一目标的常用方法。
    • 那么这一切都在我将在 WPF 应用程序中引用的 CustomControlLibrary 中吗?对不起,新手的问题,但说到 WPF,我......
    • 不必如此。它可以是内联的(即所有样式和控件/数据模板都可以在控件出现的文档中)您可以将样式(引用模板)放在单独的自定义控件中(对于那些需要一些编码以使魔术发生)或者您可以只拥有一个指定样式的资源字典。自定义控件的内联托管很难维护,如果控件需要一些代码,最好将其放在自定义控件库中或作为用户控件。如果只是表面上的改变,我会使用资源字典。
    猜你喜欢
    • 2010-09-14
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    相关资源
    最近更新 更多