【问题标题】:Windows Phone 8: Checkbox in Application BarWindows Phone 8:应用程序栏中的复选框
【发布时间】:2013-07-16 14:40:15
【问题描述】:

我有一个 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>

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

谢谢..

【问题讨论】:

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


    【解决方案1】:

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

    例如,PDF 阅读器在其ApplicationBar 上有一个项目,根据当前所处的模式从“单页视图”变为“连续视图”。

    【讨论】:

      【解决方案2】:

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

      示例 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 的文本以指示您是否正在过滤。点击事件看起来与上面类似。

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

      示例 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 的过滤器,以指示用户是否要查看它们。

      【讨论】:

      • 我认为,对于维护和应用程序的未来来说,第三个将是健康的。谢谢你的想法。
      • 顺便说一下,在我的 filterpage.xaml 上,我会使用复选框,对吗?但是我将如何理解哪些复选框已选中或未选中,我将过滤我的新闻提要?你能帮我多一点吗?
      • 这取决于你。我有一个静态过滤器类,我可以从过滤器页面和要过滤的页面访问它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多