【问题标题】:WPF Popup's alignment point inconsistent (top right, or top left) with Placement=AbsolutePointWPF Popup 的对齐点与 Placement=AbsolutePoint 不一致(右上角或左上角)
【发布时间】:2015-06-09 11:48:08
【问题描述】:

当我的应用程序在不同的计算机上运行时,我发现 Popup 控件的位置不一致。我将 Placement 设置为 AbsolutePoint 并体验到弹出窗口在 2 台计算机上与弹出窗口的右上角对齐,但在另一台计算机上与弹出窗口的左上角对齐(在每台计算机上运行相同的应用程序时)。

我使用 Horizo​​ntalOffset 和 VerticalOffset 依赖属性来定位弹出窗口,相对于屏幕的左上角坐标。

文档 (https://msdn.microsoft.com/en-us/library/bb613596%28v=vs.110%29.aspx) 显示弹出窗口对齐点应该在弹出窗口的左上角,目标区域是整个屏幕(因此目标原点在屏幕的左上角)。

认为这可能是 .Net 框架的变化或显示缩放因子的差异(不太可能,但仍然如此),我收集了以下信息,但我看不出这种行为的明显原因;

弹出窗口对齐点位于弹出窗口右上角的计算机是: 1).Net Framework 4.5.1 和 125% 的缩放因子 2).Net Framework 4.5.2和100%的缩放因子

弹出窗口对齐点与弹出窗口左上角的计算机是: 1).Net Framework 4.5.2 的比例因子未知(我需要访问它以再次检查)。

任何想法为什么展示位置不一致?这与屏幕的边界无关 - 弹出窗口不在任何边缘。

【问题讨论】:

标签: c# wpf popup alignment


【解决方案1】:

我通过在与所需放置目标相同的网格列/行中添加边框来解决此问题。然后将其设置为放置目标。通过将此边框的宽度绑定到弹出内容,它将自动调整其宽度,因此对齐(左或右)是无关紧要的。如果您仍想控制对齐,可以通过对齐放置目标边框来实现。希望这是有道理的,如果没有,这里有一个简单的例子。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <Popup x:Name="StartMenuPopup" Placement="Top" PlacementTarget="{Binding ElementName=PopupTarget}" >
        <Border x:Name="PopupBorder">
        </Border>
    </Popup>

    <Border x:Name="PopupTarget" Grid.Row="1" Width="{Binding ActualWidth, Mode=OneWay, ElementName=PopupBorder}" 
    BorderThickness="0" HorizontalAlignment="Left" VerticalAlignment="Top"/>

    <startmenu:TaskBar Grid.Row="1">
        <startmenu:TaskBar.StartButton>
            <startmenu:ToggleMenu Width="36" x:Name="StartButton"
                          ImageData="{Binding StartButtonImageData}"
                          AssociatedPopup="{Binding ElementName=StartMenuPopup}"
                          IsOpen="{Binding StartMenuOpen, Mode=TwoWay}"/>
        </startmenu:TaskBar.StartButton>
    </startmenu:TaskBar>
</Grid>

popup PlacementTarget 绑定到 PopupTarget 边框,PopupTarget 边框宽度绑定回 PopupBorder 元素。这使得 PopupTarget 边框与弹出窗口的宽度相同,因此消除了对齐问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 2021-08-21
    • 2017-05-13
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多