在我的解决方案中,我有一个自定义弹出控件,根据个人要求设置,当我将应用程序移动到屏幕右侧,然后定义自定义宽度(这很好)时,我唯一的问题发生了,但我的内容在左侧调整了大小,我的CustomPopupPlacementCallback
不起作用(附加剪辑)。最后,为了确认,我希望我的内容从弹出窗口的右侧调整大小,而不将弹出窗口移动到它附近定义的网格上。有什么建议可以解释一下吗?
我的弹出窗口有一个边框,里面有一个堆栈面板,我有一些texblocks控件,就是这样。
<Popup>
<Border BorderThickness="0" Background="{DynamicResource RegularButtonBrush}" Padding="3,15,0,0" FlowDirection="LeftToRight">
<StackPanel x:Name="popupSideMenuLabels" Orientation="Vertical" CanHorizontallyScroll="False" FlowDirection="LeftToRight">
<TextBlock x:Name="tblogbook" Text="Loogout"/>
<TextBlock x:Name="tblogbook" Text="Manage"/>
<TextBlock x:Name="tblogbook" Text="Logbook"/>
<TextBlock x:Name="tblogbook" Text="Notifications"/>
<TextBlock x:Name="tblogbook" Text="Cell Settings"/>
<TextBlock x:Name="tblogbook" Text="Reports"/>
</StackPanel>
</Border>
</Popup>
为了确认,我的文本块连同弹出控件被显示为在视频剪辑,但我想两个推卸弹出窗口的右侧,如果默认宽度大于新定义(空间之间的父控件网格和屏幕的右端铰)字面意思是有“日志”或“马”或“管理”,例如“否”,而不是“通知”等“洛”。
更新-代码
var taskBarHeight = SystemParameters.PrimaryScreenHeight - SystemParameters.WorkArea.Height;
var screenHeight = SystemParameters.PrimaryScreenHeight - taskBarHeight;
var screenWidht = SystemParameters.PrimaryScreenWidth - 40; //40 pixels is width of parent
var gridPoint = sideMenuGrid.PointFromScreen(new Point(0, 0));
var gridSizeHeight = gridPoint.Y < 0
? screenHeight - (-gridPoint.Y)
: screenHeight - gridPoint.Y;
var gridSizeWidth = gridPoint.X < 0
? screenWidht - (-gridPoint.X)
: screenWidht - gridPoint.X;
mypopup.Height = gridSizeHeight;
if (DefaultSideMenuWidth - gridSizeWidth < 0) // Not at the edge of the screen
sideMenuGrid.FindVisualChild<NonTopmostPopup>("PART_Popup").Width = DEFAULT_SIDE_MENU_WIDTH;
else // At the edge of the screen
{
sideMenuGrid.FindVisualChild<NonTopmostPopup>("PART_Popup").Width = gridSizeWidth;
}
通过这段代码,如果应用程序位于任务栏下方,我将获得垂直高度。宽度也是如此,我实现了宽度,但它不是从右边收缩,因为我希望它收缩。
更新(右侧):
所以,如果我把我的应用程序移到右边,例如我的侧菜单父(这是一个网格)被显示一半的大小,同样的事情发生在我的弹出窗口有一个完整的大小,当涉及到高度,但仍然是应用程序的左侧被吞噬的某种原因。
1条答案
按热度按时间rggaifut1#
您可以创建一个自定义控件,如WinUI 3中的SplitView,而不是自己计算所有内容。
泛型.xaml
SplitView.cs
然后像这样使用它: