2011-01-13 96 views
7

我有一个简单的窗口。 这是当我单击组合框时发生的情况: Screenshot 列表出现在屏幕的左上角而不是Combobox下。C#奇怪的WPF组合框行为

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> 
+0

这可能与此有关:http://stackoverflow.com/questions/1998024/wpf-combobox-dropdown-part-appears-in-the-wrong-place – MarcelDevG 2011-01-13 08:45:50

+2

对我的作品确定。你在代码背后有什么? – 2011-01-13 10:03:05

回答

5

而是直接在Loaded事件打开它,只是排队的调度另一条消息,打开它的。

1

我遇到了这个,只是在WPF ComboBox DropDown part appears in the wrong place发布了一个例子,它为我工作。有兴趣的读者可以去那里细读我的评论,但这里的代码段(注:WindoBaseLoadedHandler是在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; 
     })); 
    }