2010-05-11 68 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