Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有固定文本的组合框_C#_Wpf_Combobox - Fatal编程技术网

C# 带有固定文本的组合框

C# 带有固定文本的组合框,c#,wpf,combobox,C#,Wpf,Combobox,我试图在组合框内设置固定文本,但a无法“覆盖”默认行为,即它总是将文本设置为SelectedItem.ToString()。有办法做到这一点吗 我当前的组合框如下所示: <ComboBox x:Name="ddlSection" Text="Hello World!" ItemsSource="{Binding Sections}" SelectedItem="{Binding Selected

我试图在组合框内设置固定文本,但a无法“覆盖”默认行为,即它总是将文本设置为SelectedItem.ToString()。有办法做到这一点吗

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

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


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

您需要创建一个自定义的
项目模板。试试这个:

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

您需要制作一个自定义的
ItemTemplate
。试试这个:

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

您必须更改组合框的模板。您可以通过右键单击然后选择编辑模板>编辑副本来创建副本

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

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


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

您必须更改
组合框的模板。您可以通过右键单击然后选择编辑模板>编辑副本来创建副本

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

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


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

用户将如何看,他已经选择了另一个项目?文本将始终保持Hello World,但当弹出窗口打开时,用户可以选择不同的项目?这对你有多大意义?我知道这不是默认行为,用户不会看到当前选择的内容,但很难解释为什么我需要它。是的,这正是我想要的,我很抱歉这对你来说没有任何意义,但是有没有办法做到呢。使用DataTemplates或ControlTemplates。@devhedgehog能否请您提供一个更详细的解释性答案,并且再次建议不要与gleng相同,弹出窗口中的项目应保持原样并显示“正确”,只有文本框(在comboxbox中)应显示不同的值(“Hello World!”)。用户将如何看待,他已经选择了另一个项目?文本将始终保持Hello World,但当弹出窗口打开时,用户可以选择不同的项目?这对你有多大意义?我知道这不是默认行为,用户不会看到当前选择的内容,但很难解释为什么我需要它。是的,这正是我想要的,我很抱歉这对你来说没有任何意义,但是有没有办法做到呢。使用DataTemplates或ControlTemplates。@devhedgehog您能提供一个更详细的解释吗?同样,您不建议与gleng相同,弹出窗口中的项目应保持原样并显示“正确”,只有文本框(在comboxbox中)应显示不同的值(“Hello World!”)。抱歉,但这不是我喜欢做的,由于这将更改列表中的项目,因此列表应显示正确的值,但仅文本应不同(固定)。这不会更改列表中的项目。它改变了它们的显示方式。是的,这就是我的意思,我并不希望项目按原样显示,但无论选择哪个项目,文本框部分中的文本应始终包含相同的文本。抱歉,但这不是我喜欢做的,因为这将更改列表中的项目,列表应显示正确的值,但仅文本应不同(固定)。这不会更改列表中的项目。它改变了它们的显示方式。是的,这就是我的意思,这不是我所希望的项目应按原样显示,但无论选择了什么项目,文本框部分中的文本应始终包含相同的文本。