簡體   English   中英

WPF組合框在窗口加載后未顯示所選項目

[英]WPF Combobox not showing selected item on after window loads

我在WPF應用程序中有一個組合框,其中包含三個項目,允許用戶切換語言。

<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上方或右下角的按鈕上方,就會出現默認項,如下所示:

第二張圖片

在窗口加載后,我嘗試通過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具有加載事件,就像可以使用它的窗口一樣。 只需轉到其事件列表,然后選擇加載然后設置選擇即可。 記住要先選擇xaml或Windows加載中的選擇索引。 當您將組合框綁定到數據庫,並在窗口加載頁面中有條件地設置為某個索引並在加載事件中重復它時,這很有用,這樣的結果是您可以在窗口加載中看到所選內容,而無需單擊組合框即可看到選擇更改的視覺更新。

請參見下面的示例代碼。 請記住,您可以根據需要在int 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 ;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM