I am developing Windows 8 (I know Windows 8.1 has Flyout
control) app using C#/XAML. I want to show a flyout menu like given below. Now originally it has total 10 options but based on context I am showing certain amount of options, so the usercontrols doesn't have fixed height, it's Auto.
I followed this article to correctly appear flyout on appbar button click. But it's not useful for me because it's using usercontrol's height and for my case it's NaN
.
So any one has any better solution to show flyout with variable height.
PS : I don't want to use Callisto for a single requirement.
Flyout usercontrol. (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>
Download button click event in 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;
}