C # Странное WPF Combobox Поведение - PullRequest
7 голосов
/ 13 января 2011

У меня простое окно. Вот что происходит, когда я нажимаю ComboBox: Screenshot Список отображается в левом верхнем углу экрана, а не под списком.

XAML:

<Window x:Class="WpfPortOfTestingCamera.VideoSettings"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Video Settings" WindowStartupLocation="CenterOwner" ResizeMode="NoResize" ShowInTaskbar="False" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" SizeToContent="WidthAndHeight" d:DesignHeight="167">
    <StackPanel Name="stackPanel1" VerticalAlignment="Top" HorizontalAlignment="Center">
        <GroupBox Header="Settings" Name="groupBox1">
            <Grid Name="grid1" VerticalAlignment="Center" HorizontalAlignment="Center">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="80*" />
                    <ColumnDefinition Width="175*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Label Content="Resolution:" Height="28" Name="label1" Margin="0" HorizontalAlignment="Left" VerticalAlignment="Center" />
                <Label Content="Framerate:" Height="28" HorizontalAlignment="Left" Margin="0" Name="label2" VerticalAlignment="Center" Grid.Row="1" />
                <ComboBox Grid.Column="1" Height="23" HorizontalAlignment="Left" Margin="0" Name="comboBox1" VerticalAlignment="Center" Width="150" SelectionChanged="comboBox1_SelectionChanged" />
                <ComboBox Height="23" HorizontalAlignment="Left" Margin="0" Name="comboBox2" VerticalAlignment="Center" Width="150" Grid.Column="1" Grid.Row="1" SelectionChanged="comboBox2_SelectionChanged" />
            </Grid>
        </GroupBox>
        <Label Name="labelSelectedSize" Content="Size @ FPS" />
        <Button Name="button1" Content="Apply" Click="button1_Click" />
    </StackPanel>
</Window>

Ответы [ 2 ]

5 голосов
/ 13 февраля 2011

Вместо того, чтобы открывать его непосредственно в событии Loaded, просто поставьте в очередь еще одно сообщение в Диспетчере, чтобы открыть его.

1 голос
/ 16 апреля 2014

Я столкнулся именно с этим и только что опубликовал пример на WPF ComboBox DropDown часть появляется в неправильном месте , который работал для меня.Заинтересованный читатель может пойти туда, чтобы просмотреть мой комментарий, но вот фрагмент (ПРИМЕЧАНИЕ: WindoBaseLoadedHandler - это обработчик «Loaded =», указанный в XAML):

protected void WindowBaseLoadedHandler(object sender, RoutedEventArgs e)
{

... несущественные строки кодаудалено ...

    if (DataContext != null)
    {
        Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
        {
            this.IsEnabled = false;

            LoginDlg loginDlg = new LoginDlg();
            loginDlg.ShowDialog();

            if (!loginDlg.Success)
            {
                /*-----------------------------------
                 * Log on failed -- terminate app...
                 *----------------------------------*/
                ...termination logic removed...
            }

            this.IsEnabled = true;
        }));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...