如何通过样式模板触发器在WPF中将组合框显示为文本框?

时间:2010-03-19 19:07:50

标签: wpf

当我将它设置为只读时,我想将组合框下拉列表显示为文本框。出于某种原因,我似乎无法将组合框中所选项目的文本绑定到文本框。这是我的XAML:

 <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:Test

我真的很感激帮助!

2 个答案:

答案 0 :(得分:0)

您正在将文本框.Text属性绑定到ComboBoxItem对象。我认为你的绑定应该是这样的:

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

如果这不起作用,请创建一个值转换器,从ComboBoxItem对象中提取要显示的任何文本。

答案 1 :(得分:0)

您获得的结果是正确的,因为您使用ComboBoxitem作为ComboBox的项目。通常在DataBinding情况下,您可能不需要那种ComboBoc填充。因此,当您将ComboBox.ItemsSource绑定与CLR集合一起使用时,您将获得正确的结果。