Windows Phone 8:应用程序栏中的复选框

时间:2013-07-16 14:40:15

标签: c# xaml windows-phone-8 windows-phone

我有一个Windows Phone 8项目。这个应用程序包括新闻,我坚持应用程序栏问题。 我需要根据检查的类别过滤我的新闻。这些类别将在我的应用栏中。

用户将打开菜单并根据他/她的兴趣过滤新闻。 但问题是,我无法将复选框放入该应用程序栏中。

这就是我所做的;

<phone:PhoneApplicationPage.Resources>
        <shell:ApplicationBar x:Name="ApplicationBarHaberler" IsVisible="True" IsMenuEnabled="True" ForegroundColor="SeaShell" BackgroundColor="DarkGreen">
            <shell:ApplicationBarIconButton IconUri="Images/appbar_news.png" Text="Haberler"/>
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="Politics"/>
                <shell:ApplicationBarMenuItem Text="Economy"/>
                <shell:ApplicationBarMenuItem Text="Sport"/>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
</phone:PhoneApplicationPage.Resources>

我需要输入复选框并勾选一些内容并且必须过滤新闻。 有人可以帮忙吗?

谢谢..

2 个答案:

答案 0 :(得分:0)

该平台根本不支持此功能。您可以根据需要将每行的Text更改为“显示政治”/“隐藏政治”,切换说明以显示用户选择该项目时会发生什么。

例如,PDF阅读器的ApplicationBar上有一个项目,从“单页面视图”更改为“连续视图”,具体取决于当前所处的模式。

答案 1 :(得分:0)

我建议三种选择。如果您有四个或更少的过滤器,则可以将它们作为按钮添加到应用程序栏中。然后,您可以在单击按钮时更改按钮的图像和文本,以指示用户是否会获得这些按钮。

示例1

<phone:PhoneApplicationPage.Resources>
    <shell:ApplicationBar x:Name="ApplicationBarHaberler" IsVisible="True" IsMenuEnabled="True" ForegroundColor="SeaShell" BackgroundColor="DarkGreen">
        <shell:ApplicationBarIconButton IconUri="Images/appbar_NoPolitics.png" Text="Politics" Click="OnPoliticsClicked"/>
        <shell:ApplicationBarIconButton IconUri="Images/appbar_NoEconomy.png" Text="Economy" Click="OnEconomyClicked"/>
        <shell:ApplicationBarIconButton IconUri="Images/appbar_NoSport.png" Text="Sport" Click="OnSportClicked"/>

private const int SportsButtonIndex = 2;
private void OnSportClicked(object sender, EventArgs e)
{
    ViewModel.FilteringSports = !ViewModel.FilteringSports;
    if(ViewModel.FilteringSports)
    {
        (ApplicationBar.Buttons[SportsButtonIndex] as ApplicationBarIconButton).IconUri = new Uri("Images/appbar_FilterSports", UriKind.Relative);
    }
    else
    {
        (ApplicationBar.Buttons[SportsButtonIndex] as ApplicationBarIconButton).IconUri = new Uri("Images/appbar_NoSports", UriKind.Relative);
    }
}

第二个想法是Mike Dimmick建议并更改MenuItems的文本以指示您是否正在过滤。点击事件看起来与上面的相似。

第三个(也是我最喜欢的)是有一个Filters页面。您将有一个“过滤器”图标按钮,单击该按钮将导航到包含所有过滤器的FilterPage。这也为您提供了以后添加更多过滤器的优势。当您导航回页面时,您将过滤Feed。

Exmaple 3

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    if ((e.NavigationMode == NavigationMode.Back) && ChangingFilter)
    {
        Filter();
        ChangingFilter = false;
    }
}

private void OnFilterButtonClick(object sender, EventArgs eventArgs)
{
    ChangingFilter = true;
    NavigationService.Navigate(new Uri("/FilterPage.xaml", UriKind.Relative));
}

FilterPage将列出所有带CheckBox的过滤器,以指示用户是否想要查看它们。