【问题标题】:Combobox with fixed text带有固定文本的组合框
【发布时间】:2013-11-05 12:38:35
【问题描述】:

我正在尝试在组合框中设置固定文本,但无法“覆盖”它始终将文本设置为 SelectedItem.ToString() 的默认行为。有没有办法做到这一点?

我当前的组合框如下所示:

<ComboBox x:Name="ddlSection"
                Text="Hello World!"
                ItemsSource="{Binding Sections}"
                SelectedItem="{Binding SelectedSection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</ComboBox>

在此组合框中应始终包含文本“Hello World!”无论选择什么项目都会显示,我现在唯一可以实现的方法是使用 SelectedItemChanged 并手动重置 Text 属性。

【问题讨论】:

  • 用户将如何看到他选择了另一个项目?
  • 文本应始终保持 Hello World 但用户可以在弹出窗口打开时选择不同的项目?这对你有多大意义?
  • 我知道这不是默认行为,用户不会看到当前选择的内容,但很难解释为什么我需要它。所以是的,这正是我想要的,很抱歉这对你没有任何意义,但有没有办法做到这一点。
  • 是的,有办法做到这一点。使用 DataTemplates 或 ControlTemplates。
  • @devhedgehog 您能否提供一个更解释的答案,并且再次不是您推荐与 gleng 相同的内容,弹出窗口中的项目应保持原样并仅“正确”显示文本框(在组合框)应该显示不同的值(“Hello World!”)。

标签: c# wpf combobox


【解决方案1】:

您必须更改ComboBox 的模板。您可以通过右键单击然后选择 Edit Template > Edit a Copy...

来创建副本

在原始模板中,您会找到一个ContentPresenter,其内容绑定到所选元素:

<ContentPresenter x:Name="contentPresenter" 
    ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" 
    ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
    Content="{TemplateBinding SelectionBoxItem}" 
    ... />

您可以将 ContentPresenter 替换为您想要显示的任何内容,或者简单地将 Content 属性的值替换为您自己的绑定或硬编码值(例如“Hello world”)

【讨论】:

    【解决方案2】:

    您需要自定义ItemTemplate。试试这个:

    <ComboBox ItemsSource="{Binding Binding Sections}" SelectedItem="{Binding SelectedSection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="Hello World!"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
    

    【讨论】:

    • 对不起,但这不是我喜欢做的,因为这会改变列表中的项目,列表应该显示正确的值,但只有文本应该不同(固定)。
    • 这不会更改列表中的项目。它改变了它们的显示方式。
    • 是的,这就是我的意思,并不是我希望项目按原样显示,但无论选择什么项目,文本框部分中的文本都应始终包含相同的文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多