Поскольку выпадающий список происходит из класса Selector
, который, в свою очередь, происходит от ItemsControl
. Таким образом, наследуя UserControl, вы добавляете в свой комбинированный список свойства класса Selector, которые могут внутренне обрабатывать объект Selection для вас. поэтому, я бы предложил вместо того, чтобы выводить его из UserControl, вы должны извлечь его из Combobox, как это -
public partial class ClearableComboBox : ComboBox
Таким образом, таким образом вам не придется переопределять ItemsSource
, DisplayMemberPath и т. Д. В вашем классе, поскольку он уже присутствует в классе ComboBox
. Вы всегда можете расширить свой класс, чтобы обеспечить дополнительные функции, которые в вашем случае устанавливают значение SelectedItem
равным нулю при некотором нажатии кнопки. Надеюсь, это то, что вы хотите ..
РЕДАКТИРОВАТЬ (пользовательский контроль)
Создание пользовательского элемента управления - это ваш ответ, для начала, если вы не знаете об этом, посмотрите на это для начала - http://www.wpftutorial.net/HowToCreateACustomControl.html
Когда вы создаете пользовательский элемент управления, скажем, CustomControl1, замените шаблон для CustomControl1 в файле Generic.xaml
на этот -
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<DockPanel>
<Button Name="btn" DockPanel.Dock="Left" ToolTip="Clear" Width="20">
<Image Source="pack://application:,,,/img/icons/silk/cross.png" Stretch="None" />
</Button>
<ComboBox Name="comboBox"
ItemsSource="{TemplateBinding ItemsSource}"
SelectedItem="{TemplateBinding SelectedItem}"
DisplayMemberPath="{TemplateBinding DisplayMemberPath}" />
</DockPanel>
</Border>
</ControlTemplate>
По умолчанию ваш класс CustomControl1
будет производным от Control
. Замените его, чтобы он был производным от класса ComboBox
, чтобы вам еще не приходилось объявлять DP снова, как это, и скопируйте и вставьте туда этот код -
public class CustomControl1 : ComboBox
{
private Button clearButton;
private ComboBox comboBox;
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
clearButton = GetTemplateChild("btn") as Button;
comboBox = GetTemplateChild("comboBox") as ComboBox;
clearButton.Click += new RoutedEventHandler(clearButton_Click);
}
private void clearButton_Click(object sender, RoutedEventArgs e)
{
comboBox.SelectedItem = null;
}
}
Теперь ваш класс CustomControl1 готов для использования в других ваших xaml-файлах, как этот -
<local:CustomControl1 ItemsSource="{Binding YourSource}"
SelectedItem="{Binding YourSelectedItem}"
Height="50" Width="200"/>