none
WPF popup显示位置问题 RRS feed

  • 问题

  • 如图,我设置了我的Popup位置为Bottom 它却显示在底部右对齐,正常情况应该显示在底部左对齐

    在我们公司有些电脑上是底部居右,但多数电脑上运行正常

    出现这种情况可能由什么原因引起?

    

    2012年3月1日 9:39

答案

  • 我在我的电脑分别都重现了,原因是Popup对齐位置还受到系统一个参数 SystemParameters.MenuDropAlignment 影响,如果这个值为True 则就会发生你的那种情况。所以我们把这个系统参数改成False即可:

        [DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]
        public static extern bool SystemParametersInfoSet(uint action, uint uiParam, uint vparam, uint init);
    ...
    
          SystemParametersInfoSet(0x001C /*SPI_SETMENUDROPALIGNMENT*/, 0, 0, 0);

    相关参考:http://msdn.microsoft.com/zh-cn/library/ms724947(en-us,VS.85).aspx

    Sincerely,

     

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月5日 5:13
    版主

全部回复

  • 1. 能否弄点代码看看我这边呢个否重现。

    2. 是否你的Poup宽度过大从左向右显示后已经超出屏幕区域,这个时候他会选择显示在右侧。

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月2日 7:59
    版主
  • <Window x:Class="WpfApplication7.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"> <Canvas Width="200" Height="150"> <Border Name="border" Background="Blue" Height="200" Width="200"/> <Popup IsOpen="True" PlacementTarget="{Binding ElementName=border}" Placement="Bottom"> <TextBlock FontSize="14" Background="LightGreen">Placement=Bottom</TextBlock> </Popup> <Popup IsOpen="True" PlacementTarget="{Binding ElementName=border}" Placement="Top"> <TextBlock FontSize="14" Background="LightGreen">Placement=Top</TextBlock> </Popup> <Popup IsOpen="True" PlacementTarget="{Binding ElementName=border}" Placement="Left"> <TextBlock FontSize="14" Background="LightGreen">Placement=Left</TextBlock> </Popup> <Popup IsOpen="True" PlacementTarget="{Binding ElementName=border}" Placement="Right"> <TextBlock FontSize="14" Background="LightGreen">Placement=Right</TextBlock> </Popup> </Canvas> </Window>

    运行结果如图:

    2012年3月5日 3:05
  • 我在我的电脑分别都重现了,原因是Popup对齐位置还受到系统一个参数 SystemParameters.MenuDropAlignment 影响,如果这个值为True 则就会发生你的那种情况。所以我们把这个系统参数改成False即可:

        [DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]
        public static extern bool SystemParametersInfoSet(uint action, uint uiParam, uint vparam, uint init);
    ...
    
          SystemParametersInfoSet(0x001C /*SPI_SETMENUDROPALIGNMENT*/, 0, 0, 0);

    相关参考:http://msdn.microsoft.com/zh-cn/library/ms724947(en-us,VS.85).aspx

    Sincerely,

     

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月5日 5:13
    版主