在数据模板中访问弹出对话框

Access Popup-Dialog inside a data template

我刚刚开始学习 windows 应用程序开发。比如我们怎么称呼它(对话框、内容对话框、消息对话框)?提前致谢。

好吧,我试过了,因为我的数据在 contentpresenter 中的数据模板中(制作主细节视图),现在当用户单击图标时,弹出窗口应该打开并显示与在其中选择的事件相关的数据list.How 由于弹出对话框控件是在数据模板中定义的,因此在我的 cs 文件中它无法识别该控件,所以我无法打开弹出对话框,所以我能做到这一点吗?

Xaml代码:

  <DataTemplate x:Key="DetailContentTemplate" x:DataType="data:Event">
        <Grid>

            <Grid.RowDefinitions>
                <RowDefinition Height="200" />
                <RowDefinition Height="50" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />

            </Grid.RowDefinitions>
            <Grid x:Name="Section2" Grid.Row="0">
                <Grid.Background>
                    <ImageBrush ImageSource="ms-appx:///Assets/8.JPG" Stretch="Fill" />
                </Grid.Background>


                <TextBlock MaxWidth="250"
                           Margin="36,62,34,68"
                           FontFamily="Baskerville Old Face"
                           FontSize="30"
                           Foreground="{ThemeResource ToggleButtonPressedForegroundThemeBrush}"
                           TextWrapping="WrapWholeWords"
                           d:LayoutOverrides="Width, LeftPosition, RightPosition, TopPosition, BottomPosition">
                    <Run Text="Gravitas Premier League" />

                </TextBlock>

            </Grid>
            <Grid x:Name="Content"
                  Grid.Row="1"
                  Margin="0,10,0,0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <StackPanel Grid.Column="0">
                    <RelativePanel>
                        <SymbolIcon x:Name="symbol"
                                    Margin="0,0,5,0"
                                    HorizontalAlignment="Left"
                                    RelativePanel.AlignLeftWithPanel="True"
                                    Symbol="Globe" />

                        <TextBlock HorizontalAlignment="Right"
                                   VerticalAlignment="Top"
                                   RelativePanel.RightOf="symbol"
                                   Style="{ThemeResource BaseTextBlockStyle}"
                                   Text="Category" />
                    </RelativePanel>
                </StackPanel>

                <StackPanel Grid.Column="1" HorizontalAlignment="Center">
                    <RelativePanel>
                        <SymbolIcon x:Name="symboll"
                                    Margin="0,0,5,0"
                                    HorizontalAlignment="Left"
                                    RelativePanel.AlignLeftWithPanel="True"
                                    Symbol="People" />

                        <TextBlock HorizontalAlignment="Right"
                                   VerticalAlignment="Top"
                                   RelativePanel.RightOf="symboll"
                                   Style="{ThemeResource BaseTextBlockStyle}"
                                   Text="SubCategory" />
                    </RelativePanel>
                </StackPanel>
                <StackPanel Grid.Column="2" HorizontalAlignment="Right">
                    <RelativePanel>
                        <SymbolIcon x:Name="symbllol"
                                    Margin="0,0,5,0"
                                    HorizontalAlignment="Left"
                                    RelativePanel.AlignLeftWithPanel="True"
                                    Symbol="Bullets" />

                        <TextBlock HorizontalAlignment="Right"
                                   VerticalAlignment="Top"
                                   RelativePanel.RightOf="symbllol"
                                   Style="{ThemeResource BaseTextBlockStyle}"
                                   Text="Rupee" />
                    </RelativePanel>
                </StackPanel>
            </Grid>
            <TextBlock Grid.Row="2"
                       HorizontalAlignment="Center"
                       Style="{ThemeResource ScenarioDescriptionTextStyle}"
                       Text="{x:Bind description}"
                       TextWrapping="WrapWholeWords" />

            <Grid Grid.Row="3">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>


                <SymbolIcon Grid.Column="0"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Symbol="Phone" />
                <SymbolIcon Grid.Column="1"
                            x:Name="People"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Symbol="People"
                            IsTapEnabled="True"
                            Tapped="ShowPopupOffsetClicked"
                            />



                <SymbolIcon Grid.Column="2"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Symbol="Mail" />

            </Grid>

        </Grid>
    </DataTemplate>

现在,当用户点击名称为 People 的符号并与 observablecollection(例如 EventList)进行必要的数据绑定时,我该如何打开弹出窗口。

有很多方法可以像您的屏幕截图中那样实现 UI。当您添加 in your question, I suppose you are using Template10 in your project. And in Template10, we can use ModalDialog 来实现它时。这里我以Minimal Template 10项目为例

首先,我们可能需要更改 ModalBackground 以使背景颜色看起来像您屏幕截图中的颜色。由于我们这里使用的 ModalDialog 是由 Bootstrapper 自动创建的根框架,所以我们需要覆盖 App.xaml.cs 中的 CreateRootElement 如:

public override UIElement CreateRootElement(IActivatedEventArgs e)
{
    var b = Current;
    var frame = new Windows.UI.Xaml.Controls.Frame();
    var nav = b.NavigationServiceFactory(BackButton.Attach, ExistingContent.Include, frame);

    //change background
    var background = new Windows.UI.Xaml.Media.SolidColorBrush(Windows.UI.Colors.Gray);
    background.Opacity = 0.2;

    return new Template10.Controls.ModalDialog
    {
        ModalBackground = background,
        DisableBackButtonWhenModal = true,
        Content = nav.Frame
    };
}

然后我们可以编辑 Busy.xaml 以实现您屏幕截图中的面板。在Busy.xaml中,它是一个UserControl,用作ModalDialogModalContent。例如,

<UserControl x:Class="T10Minimal.Views.Busy"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="using:T10Minimal.Views"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             d:DesignHeight="300"
             d:DesignWidth="400"
             mc:Ignorable="d">

    <Grid Width="300"
          HorizontalAlignment="Center"
          VerticalAlignment="Center"
          Background="White"
          CornerRadius="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            ...
        </Grid.RowDefinitions>
        <TextBlock Margin="20,0"
                   VerticalAlignment="Center"
                   FontSize="24"
                   Foreground="Black">
            Song Options
        </TextBlock>
        <Button Margin="12"
                HorizontalAlignment="Right"
                VerticalAlignment="Top"
                Click="CloseClicked"
                Foreground="Black"
                Style="{StaticResource TextBlockButtonStyle}">
            <SymbolIcon Symbol="Clear" />
        </Button>
        ...
    </Grid>
</UserControl>

绑定可能像原始控件中的BusyText,您可以将其类型更改为绑定数据的类型,并更改SetBusy 方法。在此之后,您可以在 ShowPopupOffsetClicked 方法中调用 SetBusy 方法来打开 "popup".

这只是一个简单的示例,您可以参考它来实现自己的。在示例中,我使用创建的 ModalDialog 作为应用程序的根框架。如果需要多个ModalDialog,可以参考GitHub上的Search (and Login) Sample