簡體   English   中英

WPF Popup的對齊點與Placement = AbsolutePoint不一致(右上或左上)

[英]WPF Popup's alignment point inconsistent (top right, or top left) with Placement=AbsolutePoint

當我的應用程序在其他計算機上運行時,我看到彈出控件的位置不一致。 我將Placement設置為AbsolutePoint,並體驗到彈出式窗口與兩台計算機上彈出窗口的右上角對齊,但與另一台計算機上的彈出窗口左上角對齊(在每台計算機上運行相同的應用程序時)。

我正在使用Horizo​​ntalOffset和VerticalOffset依賴項屬性(相對於屏幕的左上角坐標)定位彈出窗口。

該文檔( https://msdn.microsoft.com/zh-cn/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,縮放比例未知(我需要訪問它才能再次檢查)。

有什么想法為什么放置不一致? 這與屏幕的邊界無關-彈出窗口不靠近任何邊緣。

我通過在與所需放置目標相同的網格行/行中添加邊框來解決此問題。 然后將其設置為放置目標。 通過將此邊框的寬度綁定到彈出內容,它將自動調整其寬度,因此對齊方式(左或右)無關緊要。 如果仍要控制對齊,則可以通過對齊放置目標邊框來實現。 希望這是有道理的,如果不是這樣,請舉一個簡單的例子。

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

彈出窗口PlacementTarget綁定到PopupTarget邊界,而PopupTarget邊界寬度綁定回到PopupBorder元素。 這使得PopupTarget邊框的寬度與彈出窗口相同,因此消除了對齊問題。

暫無
暫無

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

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