【发布时间】:2013-11-29 12:37:17
【问题描述】:
我正在使用 C#/XAML 开发 Windows 8(我知道 Windows 8.1 有 Flyout 控件)应用程序。我想显示如下所示的弹出菜单。现在最初它总共有 10 个选项,但根据上下文我显示了一定数量的选项,所以用户控件没有固定高度,它是自动的。
我按照this article 在应用栏按钮单击时正确显示浮出控件。但这对我没有用,因为它使用的是用户控件的高度,而对于我来说,它是 NaN。
所以任何人都有更好的解决方案来显示可变高度的弹出窗口。
PS:我不想将 Callisto 用于单一需求。
弹出用户控件。 (ExportTypes.xaml)
<Border BorderThickness="2" BorderBrush="#1789E6" Background="#D1E7FA" Width="230">
<StackPanel VerticalAlignment="Bottom">
<Grid x:Name="grdPdf" Tapped="grdExportType_Tapped">
<TextBlock Text="PDF" FontSize="20" />
</Grid>
<Grid x:Name="grdOpenSpreadsheet" Tapped="grdExportType_Tapped">
<TextBlock Text="Open Office Spreadsheet" FontSize="20"/>
</Grid>
<Grid x:Name="grdMsExcel" Tapped="grdExportType_Tapped">
<TextBlock Text="Microsoft Excel" FontSize="20"/>
</Grid>
<Grid x:Name="grdMsWord" Tapped="grdExportType_Tapped">
<TextBlock Text="Microsoft Word" FontSize="20"/>
</Grid>
<Grid x:Name="grdOpenDoc" Tapped="grdExportType_Tapped">
<TextBlock Text="Open Office Document" FontSize="20"/>
</Grid>
<Grid x:Name="grdHtml" Tapped="grdExportType_Tapped">
<TextBlock Text="HTML" FontSize="20"/>
</Grid>
<Grid x:Name="grdRtf" Tapped="grdExportType_Tapped">
<TextBlock Text="RTF" FontSize="20"/>
</Grid>
<Grid x:Name="grdPlainText" Tapped="grdExportType_Tapped">
<TextBlock Text="Plain Text" FontSize="20"/>
</Grid>
<Grid x:Name="grdJson" Tapped="grdExportType_Tapped">
<TextBlock Text="JSON" FontSize="20"/>
</Grid>
<Grid x:Name="grdMsPowerPoint" Tapped="grdExportType_Tapped">
<TextBlock Text="Microsoft PowerPoint" FontSize="20"/>
</Grid>
</StackPanel>
</Border>
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;
}
【问题讨论】:
标签: c# windows-8 windows-runtime microsoft-metro winrt-xaml