Нужно заменить сторонние элементы управления WinForm, что такое закрытый WPF? - PullRequest
4 голосов
/ 27 апреля 2010

Я устал от Windows Forms ... Я просто так. Я не пытаюсь начать дебаты по этому вопросу, мне просто скучно с этим. К сожалению, мы стали зависимыми от 4 элементов управления в DevExpress XtraEditors. I не было ничего, кроме трудностей с ними, и я хочу идти дальше.

Что мне нужно сейчас, так это то, что бы заменить шкаф для 4-х элементов управления, которые я использую. Вот они:

LookUpEdit - это combobox, который фильтрует раскрывающийся список при вводе.

MemoExEdit - это textbox, который "выскакивает" большую область, когда имеет фокус

CheckedComboBoxEdit - это выпадающий список checkboxes.

CheckedListBoxControl - это красиво колонированные listbox из checkboxes

Это LOB-приложение с тоннами ввода данных. На самом деле, первые два хороши, но не обязательны. Вторые два важны тем, что мне нужно будет либо дублировать функциональность, либо изменить способ взаимодействия пользователей с этими конкретными данными.

Я ищу помощь в их репликации в WPF среде с существующими элементами управления ( codeplex и т. Д. ) или в прямой XAML. Любой код или направление будет с благодарностью, но в основном я надеюсь избежать любого коммерческого стороннего WPF и вместо этого хотел бы сосредоточиться на его создании (, но мне нужно направление ) или на использовании Codeplex

1 Ответ

9 голосов
/ 27 апреля 2010

Одна из замечательных особенностей 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;
    }
}

Теперь 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>

Что говорит свойство ItemTemplate: «Для каждого элемента в этом элементе управления сделайте меня одним из них». Таким образом, для каждого элемента в коллекции Items из ComboBox генерируется CheckBox с его Content, связанным со свойством Name вашего класса элементов, а его свойство IsChecked, связанным с Checked собственность.

И вот конечный результат:

альтернативный текст http://img155.imageshack.us/img155/9379/customcontrols.png

...