2011-09-27 139 views
1

我有一個ComboBox,綁定到一個DataTable。我想添加一個額外的ComboBoxItem到列表的頂部,我可以放置一個鏈接來自定義列表。目前我只是在我的DataTable頂部插入一個虛擬行,然後在ComboBox上使用DataTrigger使其正確顯示。但是,我沒有得到正確的結果。問題樣式數據綁定WPF ComboBoxItem

我試過兩種方法。首先,我的DataTrigger用包含TextBlock的ControlTemplate替換虛擬項。

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding}" DisplayMemberPath="wellId"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding wellId}" Value="(settings)"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ComboBoxItem"> 
           <TextBlock Text="Customize..." /> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

結果看起來不錯,但該項目上沒有鼠標懸停突出顯示。列表的其餘部分工作正常,但是當我將鼠標懸停在其上時,其中一項完全沒有反應。我嘗試添加額外的觸發器和樣式來應用鼠標懸停效果,但我沒有任何更改。

我試過的第二種方法只是改變項目的外觀,而不是完全用ControlTemplate替換它。

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding}" DisplayMemberPath="wellId"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding wellId}" Value="(settings)"> 
        <Setter Property="Content" Value="Customize..." /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

這一個函數就像一個常規列表項,鼠標懸停工作正常。但是,該項目是空白的。原始文本和我試圖在DataTrigger中設置的文本都沒有。沒有錯誤,只是一個空的列表項。

有沒有更好的方法來實現這個目標?

回答

2

取出DisplayMemberPath並添加默認內容到風格

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding }"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Setter Property="Content" Value="{Binding wellId}" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding wellId}" Value="(settings)"> 
        <Setter Property="Content" Value="Customize..." /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

DisplayMemberPath實際上是說該項目模板應該只是一個TextBlock與它的文本綁定到的DisplayMemberPath項目的快捷方式,我猜測它會覆蓋你在Style中的任何東西。

+0

這個伎倆!非常感謝你! – Nairou