Как отобразить поле со списком в виде текстового поля в WPF через триггер шаблона стиля? - PullRequest
0 голосов
/ 19 марта 2010

Я хотел бы отобразить выпадающий список выпадающего списка в виде текстового поля, когда он установлен только для чтения. По какой-то причине я не могу связать текст выбранного элемента в поле со списком с текстовым полем. Это мой 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 голосов
/ 19 марта 2010

Результат, который вы получаете, верен, потому что вы использовали ComboBoxitem как элемент для вашего ComboBox. Обычно в ситуации с привязкой данных вам может не потребоваться такая комбинация ComboBoc. Поэтому, когда вы используете привязку ComboBox.ItemsSource с коллекцией CLR, вы получите результат правильно.

0 голосов
/ 19 марта 2010

Вы связываете свойство .Text textboxes с объектом ComboBoxItem. Я думаю, что ваша привязка должна быть что-то вроде:

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

Или, если это не сработает, создайте преобразователь значений, который извлекает любой текст, который вы хотите отобразить, из объекта ComboBoxItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...