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

问题描述 投票:0回答:2

我在一个包含三个项目的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”

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

c# wpf xaml combobox
2个回答
1
投票

如前所述,问题出在此代码之外。如果我创建一个新的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事件并查看它是否有效。


0
投票

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

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>

现在在代码背后你应该使用下面的代码或类似的条件作为你的条件(下面的代码是100%测试)

 private void OnComboBoxLoad(object sender, RoutedEventArgs e)
    {
        //store current selcted index in variable
        int tempIndex = ((ComboBox)sender).SelectedIndex;

        //// ... Make the your desire item selected.
        ((ComboBox)sender).SelectedIndex = -1;
        ((ComboBox)sender).SelectedIndex = tempIndex ;
    }
© www.soinside.com 2019 - 2024. All rights reserved.