2010-03-19 13 views
0

我想顯示一個組合框下拉列表作爲文本框,當它被設置爲只讀。出於某種原因,我似乎無法將組合框中選定項目的文本綁定到文本框。這是我的XAML:如何通過樣式模板觸發器在WPF中將組合框顯示爲文本框?

<Style x:Key="EditableDropDown" TargetType="ComboBox"> 
     <Style.Triggers> 
      <Trigger Property="IsReadOnly" Value="True"> 
       <Setter Property="Background" Value="#FFFFFF" /> 
       <Setter Property="Template"> 
         <Setter.Value> 
         <ControlTemplate TargetType="ComboBox"> 
          <TextBox Text="{TemplateBinding SelectedItem, Converter={StaticResource StringCaseConverter}}" 
             BorderThickness="0" 
             Background="Transparent" 
             FontSize="{TemplateBinding FontSize}" 
             HorizontalAlignment="{TemplateBinding HorizontalAlignment}" 
             FontFamily="{TemplateBinding FontFamily}" 
             Width="{TemplateBinding Width}" 
             TextWrapping="Wrap"/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

<ComboBox IsReadOnly="{Binding ReadOnlyMode}" Style="{StaticResource EditableDropDown}" Margin="0 0 10 0"> 
     <ComboBoxItem IsSelected="True">Test</ComboBoxItem> 
</ComboBox> 

當我這樣做,我得到以下爲全文:

System.Windows.Controls.ComboBoxItem:測試

我會很感激的幫助!

回答

0

您得到的結果是正確的,因爲您使用ComboBoxitem作爲ComboBox的項目。通常在DataBinding情況下,您可能不需要那種ComboBoc羣體。所以,當你使用ComboBox.ItemsSource與CLR集合綁定時,你會得到正確的結果。

+0

這對我來說,雖然我仍然困惑,我不能用另一種方式使用SelectedItemPath – 2010-03-22 14:57:27

0

您正在將文本框.Text屬性綁定到ComboBoxItem對象。我想你你的綁定應該是這樣的:

Text="{TemplateBinding SelectedItem.Content, ...} 

或者,如果不工作,做一個值轉換器提取你想從ComboBoxItem對象顯示任何文本。

+0

是的,我試過了,它不起作用。轉換器是唯一的途徑嗎? – 2010-03-19 19:42:41

+0

@Greg:就像Jobi建議的那樣,如果你將組合框綁定到一組對象(理想的字符串),那麼這樣做會更好。 – 2010-03-19 22:16:54

+0

這是有道理的,我認爲你可以解決它與選定的善舉以某種方式 – 2010-03-22 14:57:00

相關問題