c# - 如何在特定条件下隐藏 UWP 弹出窗口

标签 c# .net wpf windows uwp

在此处输入代码您好,我正在我的 UWP 应用程序中使用 Flyout。单击按钮,我将在弹出窗口中显示项目列表。当我单击按钮时,弹出窗口被打开。 但在这里我想在列表不为空时打开弹出窗口。如果列表为空,我想隐藏弹出窗口。

为此,我编写了代码,但隐藏不起作用。 任何人都可以对此有想法。

xaml 代码:

 <Button TabIndex="4" Background="#212121" Name="btnCashPay" Click="btnCashPay_Tapped" HorizontalAlignment="Center" VerticalAlignment="Center" BorderBrush="#212121" BorderThickness="0" Margin="0,-5,0,0" >
<Image HorizontalAlignment="Center" VerticalAlignment="Center" Source="/Images/pay_bill(30_30).png"  Stretch="None"/>
   <Button.Flyout>
<Flyout x:Name="flyout" FlyoutPresenterStyle="{StaticResource Flyoutstyle}">

   <StackPanel>
 <TextBlock Grid.Row="0" Height="35" HorizontalAlignment="Center" Foreground="DarkTurquoise" FontWeight="SemiBold">Please Add Free Items To Cart </TextBlock>
 <Border x:Name="dgFreeItemsug" BorderThickness="0.5" Visibility="Visible" BorderBrush="LightSlateGray" Grid.Row="1" Background="White"  Height="200" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="10,-16,5,0">
 <ScrollViewer x:Name="svFreeItemSugg" HorizontalScrollBarVisibility="Hidden" Padding="0" VerticalScrollBarVisibility="Auto" VerticalAlignment="Top" HorizontalAlignment="Stretch" Grid.Column="0" Grid.Row="0" Margin="0,0,0,0">

 <controls:DataGrid x:Name="dgFreeItem" Height="200"  HorizontalAlignment="Stretch"  
    controls:DataGridExtensions.UseSingleSelectionAndDeselection="true" VerticalAlignment="Top"  RowBackgroundEvenBrush="White" RowBackgroundOddBrush="White" Margin="0,0,0,0" Navigate="dgFreeItem_Navigate">
     <controls:DataGrid.Columns>
 <controls:DataGridTextColumn x:Name="freeitemddesc" Width="1*" Binding="{Binding DealSku}">
 </controls:DataGridTextColumn>
  <controls:DataGridTextColumn x:Name="freeitemprice" Width="2*" Binding="{Binding DealDescription}">
  </controls:DataGridTextColumn>
  </controls:DataGrid.Columns>
 </controls:DataGrid>
 </ScrollViewer>
   </Border>
   </StackPanel>
 </Flyout>
 </Button.Flyout>
</Button>

xaml.cs 代码:

private void btnCardPay_Tapped(object sender, RoutedEventArgs e)
{
    txtcardmessage.Text = string.Empty;
    media.Play();
    if (objfreeitemlist == null)
        btnCardPay.Flyout.Hide();
}

最佳答案

您可以将 Flyout 定义为按钮资源

<Button x:Name="MyButton" Content="Button" Tapped="Button_Tapped" >
    <Button.Resources>
        <Flyout x:Name="MyFlyout">
            ....
        </Flyout>
    </Button.Resources>
</Button>

这样您必须自己打开 Flyout,但您可以定义何时打开它。

private void Button_Tapped(object sender, TappedRoutedEventArgs e)
{
    var button = sender as Button;

    if (button != null && objfreeitemlist != null)
    {
        MyFlyout.ShowAt(button);
    }
}

关于c# - 如何在特定条件下隐藏 UWP 弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859306/

相关文章:

C# 如何从 xml 文件中获取所有元素名称

c# - 如何在 C#/.NET 中声明常量?

c# - 如何将字符串显式转换为安全字符串

c# - 更快地替代 Dictionary<TKey, TValue>

c# - 事件队列无法正常工作 winforms

c# - 从列表框和文件夹中删除选定的文件

c# - 图像按钮上的边框

c# - 将 WPF 事件映射到 Windows 窗体事件

wpf - 基于可见性停止/开始 Storyboard动画

WPF - 有没有办法从 Canvas.Children 中删除特定的 child ?