如何为具有可变高度的弹出窗口设置垂直偏移量

我正在使用C#/ XAML开发Windows 8 (我知道Windows 8.1具有Flyout控制)应用程序。 我想显示如下所示的弹出菜单。 现在最初它有10个选项,但根据上下文我显示了一定数量的选项,因此用户控件没有固定的高度,它是自动的。

我按照这篇文章在appbar按钮点击上正确显示flyout。 但它对我没用,因为它使用的是usercontrol的高度,而对于我的情况来说它是NaN

所以任何人都有更好的解决方案来展示高度可变的弹出窗口。

PS:我不想将Callisto用于单一要求。

在此处输入图像描述

弹出用户控制。 (ExportTypes.xaml)

                                   

在MainPage.xaml.cs中下载按钮单击事件

 private void btnDownload_Click(object sender, RoutedEventArgs e) { var ucExportTypes = new ExportTypes(); var flyout = new Popup(); var windowBounds = Window.Current.Bounds; var rootVisual = Window.Current.Content; var gt = btnDownload.TransformToVisual(rootVisual); var absolutePosition = gt.TransformPoint(new Point(0, 0)); flyout.IsLightDismissEnabled = true; flyout.VerticalOffset = absolutePosition.Y - 150 - 10; flyout.HorizontalOffset = absolutePosition.X + 20; flyout.Child = ucExportTypes; flyout.IsOpen = true; } 

如果你有一个容器,你可以解决你的垂直偏移问题,你可以从底部向上扩展它。 整个用户控件的designHeight必须是具有最大元素数的元素(在您的情况下为10)。 用户控件将VerticalAlignment设置为Bottom因此任何添加的元素都将强制用户控件从底部向上增长,使用户控件的底部边框保持静止。 您在ExportType.xaml使用的ExportType.xaml可能会让您感到头痛……

这是一个链接,可以帮助您理解我想要的意思。 它是关于从底部向上设置高度的动画(你不需要动画,但主要是为了得到“底部,向上”的想法)。 关于高度要求,请仔细阅读该问题的已接受答案。

只需将其更改为Popup中的ItemsControl,它绑定到View Model中的ObservableCollection。 然后,当您更改可用的内容时(您似乎称之为case ),然后更新集合。 ItemsControl将再次设置,您可以使用相同的逻辑重新显示Flyout。

使用此http://codepaste.net/erev2v

并编写如下代码:

 new FlyoutHelper().Show(YourFlyout, YourButton); 

说实话应该很容易。 唯一的问题只有在菜单可见时列表中的项目数发生了变化。 除此之外,我认为你已经定下来了。

祝你好运!