Редактировать: Конкретный пример с использованием 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>
Внешний вид:
У 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.