WPF Combobox在窗口加载后未显示所选项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF Combobox在窗口加载后未显示所选项目相关的知识,希望对你有一定的参考价值。

我在一个包含三个项目的WPF应用程序中有一个Combobox,允许用户切换语言。

<ComboBox x:Name="cmbSelectLanguage" Margin="81,53,0,0" SelectionChanged="cmbSelectLanguage_SelectionChanged" TabIndex="1" HorizontalAlignment="Left" Width="150" Height="30" VerticalAlignment="Top" SelectedIndex="0">
        <ComboBoxItem Name="enUS">                
                <TextBlock Text="English - US"/>                
        </ComboBoxItem>
        <ComboBoxItem Name="enGB">                       
                <TextBlock Text="English - UK"/>              
        </ComboBoxItem>           
        <ComboBoxItem Name="elGR">                   
                <TextBlock Text="Greek"/>              
        </ComboBoxItem>
</ComboBox>

问题是,当窗口最初加载时,它不会显示默认值。没有显示任何内容,如下所示:

只要我将鼠标移到Combobox上或右下方的按钮上,就会出现默认项目,如下所示:

我尝试在Window加载后通过XAML和代码隐藏设置Combobox SelectedIndex,但似乎没有任何效果。

什么可能导致这种行为,我将如何解决它?

编辑:谢谢你的回复。我偶然找到了解决方案。在删除了大量XAML和一些代码隐藏代码之后,我注意到在从我的Window XAML定义中删除它之后问题就消失了:SizeToContent =“WidthAndHeight”

我所有的其他代码完全一样,这是我唯一需要改变的东西。即使我不知道为什么,它的工作:)

答案

如前所述,问题出在此代码之外。如果我创建一个新的WPF项目,并将下面的代码粘贴到MainWindow的Grid中,它会显示正常:

<Window x:Class="WpfApplication6.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ComboBox x:Name="cmbSelectLanguage" Margin="81,53,0,0"  TabIndex="1" HorizontalAlignment="Left" Width="150" Height="30" VerticalAlignment="Top" SelectedIndex="0">
        <ComboBoxItem Name="enUS">
            <TextBlock Text="English - US"/>
        </ComboBoxItem>
        <ComboBoxItem Name="enGB">
            <TextBlock Text="English - UK"/>
        </ComboBoxItem>
        <ComboBoxItem Name="elGR">
            <TextBlock Text="Greek"/>
        </ComboBoxItem>
    </ComboBox>
</Grid>

尝试注释掉SelectionChanged事件并查看它是否有效。

另一答案

你的问题以这种方式解决了,但是当我遇到这样的问题时,还有另外一种方法,它对我来说效果很好。

comboBox有一个load事件,就像你可以使用它的窗口一样。只需转到它的事件列表并选择加载然后设置选择。请记住在xaml或Windows加载中首先选择选择索引。当你将组合框绑定到数据库并在窗口加载页面有条件地设置为某个索引并在加载事件中重复它时,这很有用,所以结果是你在窗口加载中看到你的选择而不需要单击组合框来查看视觉更新它的选择变化。

请参阅下面的示例代码。请记住,您可以通过编程方式或有条件地根据您的需要选择所选索引,而不是xaml(就像我在本例中所做的那样)。这一切都取决于你。

<ComboBox
    x:Name="comboItemList" 
    Height="22" 
    With="80" 
    VerticalAlignment="Center" 
    HorizontalAlignment="Center" 
    HorizontalContentAlignment="Center" 
    VerticalContentAlignment="Center" 
    Loaded="OnComboBoxLoad" 
    SelectedIndex="0">
      <TextBlock  Text="Item01" TextAlignment="Center" />
      <TextBlock  Text="Item02" TextAlignment="Center" />
      <TextBlock  Text="Item03" TextAlignment="Center" />     
</ComboBox>

以上是关于WPF Combobox在窗口加载后未显示所选项目的主要内容,如果未能解决你的问题,请参考以下文章

WPF ComboBox 与对象列表绑定,在所选项目中显示的值比在项目列表中显示的值更少

WPF ComboBox 绑定到不显示所选项目文本的用户控件集合

WPF ComboBox 最初以错误的大小显示第一个项目

将焦点放在 WPF ComboBox 上并不总是有效

wpf combobox 关闭窗口后,再次调用不显示已经选择的值?

如何在 QML 的自定义 ComboBox 中突出显示所选项目?