WPF如何制作一个内部带有按钮的自定义组合框以清除

时间:2018-10-18 14:31:33

标签: c# wpf mvvm

我制作了一个带有下拉按钮的简单组合框。如果用户单击删除按钮,则组合框的selectedItem将为空。

这是我最初的组合框:(我知道,堆栈面板应该在按钮内)

<TextBlock Text="ComboBox:"></TextBlock>
<ComboBox
     ItemsSource="{Binding ITEMS}"
     SelectedItem="{Binding Item}"
     DisplayMemberPath="Description"
     IsTextSearchEnabled="True"
     IsEditable="False"
     IsDropDownOpen="False">
 </ComboBox>
 <StackPanel
     Orientation="Horizontal"
     HorizontalAlignment="Right"
     MouseEnter="GridSplitter_MouseEnter" 
     MouseLeave="GridSplitter_MouseLeave">
         <Image
               Source="../Images/clos.png"
               Height="12" Width="15" Margin="0 0 20 4">
         </Image>
 </StackPanel>

我的问题:如何创建自定义组合框元素,这样我就不必为要制作的每个组合框重复此代码。清除的值是selectedItem。

会是这样的:

<custom:ComboBoxWithClearance>
      ItemsSource="{Binding ITEMS}"
      SelectedItem="{Binding Item}"
      DisplayMemberPath="Description"
      IsTextSearchEnabled="True"
      IsEditable="False"
      IsDropDownOpen="False"
</custom:ComboBoxWithClearance>

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以创建一个名为“ ComboBoxWithClearance”的UserControl,并将dependency propertiesItemsSourceSelectedItem)添加到此代码的后面。

然后,您将当前的XAML移到UserControl的标记文件中,并将这些属性绑定到您创建的它们相应的自定义依赖项属性:

<ComboBox DataContext="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"
     ItemsSource="{Binding ItemsSource}"
     SelectedItem="{Binding SelectedItem}"
     ... />

完成此操作后,您将能够在其他视图中使用控件并将其依赖项属性设置/绑定到所需的任何内容,例如:

<local:ComboBoxWithClearance
  ItemsSource="{Binding ITEMS}"
  SelectedItem="{Binding Item}">
  ...
</custom:ComboBoxWithClearance>