Расширение Combobox с помощью кнопок - PullRequest
2 голосов
/ 01 апреля 2011

Я хочу расширить комбинированный список WPF таким образом, чтобы рядом с ним отображались две кнопки.Я не могу использовать UserControl, потому что мне нужно указать элементы комбинированного списка в чистом xaml следующим образом:

<CustomComboBox>
   <CustomComboBoxItem />
   <CustomComboBoxItem />
</CustomComboBox>

Я очень боюсь взять шаблон комбинированного списка и расширить его, потому что для комбинированных списковэто очень большой и сложный.Я ищу простое и простое решение для создания такого типа ComboBox ItemsControl с двумя прикрепленными к нему кнопками.Предложения приветствуются!

1 Ответ

3 голосов
/ 01 апреля 2011

Редактировать: Конкретный пример с использованием UserControl:

Xaml:

<UserControl x:Class="Test.CustomComboBox"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <StackPanel Orientation="Horizontal">
        <ComboBox Name="_comboBox" Margin="5"/>
        <Button Content="_Apply" Padding="3"  Margin="5" Click="Button_Apply_Click"/>
        <Button Content="_Reset" Padding="3"  Margin="5" Click="Button_Reset_Click"/>
    </StackPanel>
</UserControl>

Код:

[ContentProperty("Items")]
public partial class CustomComboBox : UserControl
{
    public event RoutedEventHandler ApplyClick;
    public event RoutedEventHandler ResetClick;

    public ItemCollection Items
    {
        get { return _comboBox.Items; }
        set
        {
            _comboBox.Items.Clear();
            foreach (var item in value)
            {
                _comboBox.Items.Add(item);
            }
        }
    }

    public CustomComboBox()
    {
        InitializeComponent();
    }

    private void Button_Apply_Click(object sender, RoutedEventArgs e)
    {
        if (ApplyClick != null)
        {
            ApplyClick(sender, e);
        }
    }

    private void Button_Reset_Click(object sender, RoutedEventArgs e)
    {
        if (ResetClick != null)
        {
            ResetClick(sender, e);
        }
    }
}

Использование:

 <local:CustomComboBox ApplyClick="Button2_Click">
     <ComboBoxItem Content="Item1"/>
     <ComboBoxItem Content="Item2"/>
     <ComboBoxItem Content="Item3"/>
 </local:CustomComboBox>

Внешний вид:

enter image description here


У UserControl все должно быть хорошо, вы все равно можете указывать элементы в разметке Xaml, например, если у меня есть времяпользовательский контроль я могу сделать это:

[ContentProperty("Hours")]
public partial class TimeBox : UserControl
{
    public string Hours
    {
        get { return this.TBHours.Text; }
        set { this.TBHours.Text = value; }
    }

    ...
}

Таким образом, вы можете установить часы в XAML:

        <local:TimeBox>
            <sys:String>24</sys:String>
        </local:TimeBox>

Вы должны быть в состоянии настроить это, чтобы установить элементы вашего ComboBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...