2010-05-11 74 views
1

几乎我有一个可编辑组合框,并且我想在清除所选项目的下拉按钮的右侧添加一个按钮。所以...将按钮添加到wpf中的组合框中

| TextBox | X | v |

我想是这样......

<Style...> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <ControlTemplate.Resources> 
        <Style TargetType="{x:Type TextBox}">...Add button here...</Style> 
       </ControlTemplate.Resources> 
       <ContentPresenter /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

3

我不认为你的建议的方法会奏效。只要您在样式中设置了Template属性,您也必须重新定义其视觉表示。但是,您可以在ComboBoxResources部分(不在其模板中)为TextBox(如您所建议的)定义调整后的ControlTemplate

<ComboBox ...> 
    <ComboBox.Resources> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Template"> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
        <!-- define template for TextBox with an additional "clear" button --> 
       </ControlTemplate> 
      </Setter> 
     </Style> 
    </ComboBox.Resources> 
</ComboBox> 

但你仍然有问题如何处理点击这个按钮 ...

一个干净的解决方案ComboBox子类,并提供了一个ICommand从而清除当前选择。然后,您将覆盖ComboBoxControlTemplate,在下拉按钮旁边添加一个“清除”按钮,并将该按钮绑定到新的ICommand。这绝对是一些工作,但最终你有一个干净的解决方案,你可以在以后轻松扩展。

+0

很好的答案。对于这种体验的重新模板化是非常标准的和实现它的方式......并通过带有代码隐藏事件绑定,命令或新子类的模板中的额外视觉效果,它们都可以帮助您。 – 2010-05-11 08:29:04