在VS C# Windows通用中切换页面中心类的不同方法

本文关键字:方法 VS Windows 换页 | 更新日期: 2023-09-27 18:36:04

所以,这可能看起来相当基本,但到目前为止,我在 C# 中找到的用于在 Windows 通用应用程序中切换当前页面的唯一方法是使用标题单击方法并将 IsHeaderInteractive 设置为 true。 考虑到它只是停留在您单击的小"查看更多"按钮中,这看起来或感觉不是很直观。相反,我将如何向更改页面的整个中心部分添加点击事件。这是我现在所拥有的。

         private void HubSection_Click(object sender, HubSectionHeaderClickEventArgs e)
    {
        switch (e.Section.Name)
        {
            case "China":
                Frame.Navigate(typeof(SubtopicPage));
                break;
            case "Japan":
                Frame.Navigate(typeof(SubtopicPage));
                break;
        }
    }

下面是 XAML:

  <Page
x:Class="TestApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource SystemControlForegroundBaseHighBrush}">
    <Hub Header="Countries App" Foreground="#FFC3BFBF" SectionHeaderClick="HubSection_Click" Name="CountryHub">
        <HubSection x:Name="China" MinWidth="256" Height="460" Background="#FF343434" Header="China" IsHeaderInteractive="True">
            <DataTemplate>
                <Grid Height="460" Width="256" VerticalAlignment="Bottom">
                    <Image Source="Assets/chinaFlag.bmp"/>
                </Grid>
            </DataTemplate>
        </HubSection>
        <HubSection x:Name ="Japan" MinWidth="256" Height="460" Background="#FF565454" Header="Japan" IsHeaderInteractive="True">
            <DataTemplate>
                <Grid Height="460" Width="256" VerticalAlignment="Bottom">
                    <Image Source="Assets/japanFlag.bmp" Height="169"/>
                </Grid>
            </DataTemplate>
        </HubSection>
        <HubSection Width="256" Height="460" Background="#FF343434">
        </HubSection>
        <HubSection Width="256" Height="460" Background="#FF565454">
            <DataTemplate>
                <Grid Height="460" Width="256" VerticalAlignment="Bottom"/>
            </DataTemplate>
        </HubSection>
    </Hub>

</Grid>

目前,四个中心部分中有两个没有内容,但这无关紧要。提前感谢您的帮助。

在VS C# Windows通用中切换页面中心类的不同方法

同意 RicardoPons 的观点,因为我知道没有方法可以获取选定的项目。

作为工作回合,您可以添加HubSection Tabbed事件。您可以知道点击了哪个HubSection

例如:

<Hub Header="Countries App" Foreground="#FFC3BFBF" SectionHeaderClick="HubSection_Click" Name="CountryHub">
    <HubSection x:Name="China" MinWidth="256" Height="460" Background="#FF343434" Header="China" IsHeaderInteractive="True" Tapped="{x:Bind HubSectionTapped}">
        <DataTemplate>
            <Grid Height="460" Width="256" VerticalAlignment="Bottom">
                <Image Source="Assets/dog.jpg" />
            </Grid>
        </DataTemplate>
    </HubSection>
    <HubSection x:Name ="Japan" MinWidth="256" Height="460" Background="#FF565454" Header="Japan" IsHeaderInteractive="True" Tapped="{x:Bind HubSectionTapped}">
        <DataTemplate>
            <Grid Height="460" Width="256" VerticalAlignment="Bottom">
                <Image Source="Assets/color.jpg" Height="169" />
            </Grid>
        </DataTemplate>
    </HubSection>
</Hub>

在代码隐藏中:

private void HubSectionTapped(object sender, TappedRoutedEventArgs e)
{
    var hubSectiona = sender as HubSection;
    var name = hubSectiona.Name;
    NaviagteMethod(name);
}
public void NaviagteMethod(string name)
{
    switch (name)
    {
        case "China":
            Frame.Navigate(typeof(SubtopicPage));
            break;
        case "Japan":
            Frame.Navigate(typeof(SubtopicPage));
            break;
    }
}

我认为目前这是唯一的方法。

我阅读了MSDN文档中的官方文章,似乎没有事件或属性来获取当前选定的项目。

https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.controls.hub.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1