Behaviors扩展----根据Pivot的item自动切换AppBar

来源:互联网 发布:网站访问量统计js插件 编辑:程序博客网 时间:2024/06/08 06:20
 Pivot是Windows Phone中的常用控件,我们经常需要根据PivotItem的切换使用不同的AppBar,在此我提供一个Behaviors
来自动管理AppBar,省去手动切换的麻烦。
  看代码:
       [ContentProperty("AppBars")]    public class PivotAppBarBehavior : Behavior<Pivot>    {        PhoneApplicationPage _page;        public PhoneApplicationPage ParentPage        {            get            {                if (_page == null && this.AssociatedObject!=null)                    _page = this.AssociatedObject.GetParentPhonePage() as PhoneApplicationPage;                return _page;            }        }        public static readonly DependencyProperty AppBarsProperty = DependencyProperty.Register("AppBars", typeof(List<IApplicationBar>), typeof(PivotAppBarBehavior), null);        public List<IApplicationBar> AppBars        {            get            {                var appBars = base.GetValue(AppBarsProperty) as List<IApplicationBar>;                if (appBars == null)                {                    appBars = new List<IApplicationBar>();                    base.SetValue(PivotAppBarBehavior.AppBarsProperty, appBars);                }                return appBars;            }            set            {                base.SetValue(AppBarsProperty, value);            }        }        void pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)        {            if (ParentPage == null)                return;            if (AssociatedObject != null && AppBars != null && AppBars.Count > AssociatedObject.SelectedIndex)            {                IApplicationBar appbar = AppBars[AssociatedObject.SelectedIndex];                if (appbar is AppBar)                {                    AppBar bar = appbar as AppBar;                    if (bar != null)                        ParentPage.ApplicationBar = bar.ApplicationBar;                }                else                {                    ParentPage.ApplicationBar = AppBars[AssociatedObject.SelectedIndex];                }            }            else            {                ParentPage.ApplicationBar = null;            }        }        protected override void OnAttached()        {            base.OnAttached();            Pivot pivot = this.AssociatedObject as Pivot;            if (pivot != null)                pivot.SelectionChanged += pivot_SelectionChanged;               }        protected override void OnDetaching()        {            base.OnDetaching();            Pivot pivot = this.AssociatedObject as Pivot;            if (pivot != null)                pivot.SelectionChanged -= pivot_SelectionChanged;        }
  这个Behavior中保存一个AppBar的列表,并且会监听Pivot的Item切换事件,根据Item显示对应的AppBar,另外还支持
我自定义的一个AppBar,这个AppBar可以使用命令绑定,使用时会很方便,关于这个AppBar点击这里:http://www.devdiv.com/home.php?mod=space&uid=55433&do=blog&quickforward=1&id=50584。
  如何使用:
          <controls:Pivot>            <i:Interaction.Behaviors>                <local:PivotAppBarBehavior>                    <local:AppBar  Width="0" Height="0" >                        <local:AppBarIconButton Text="添加" IconUri="/appbar.new.rest.png" Command="{Binding AddItemCommand,Source={StaticResource viewmodel}}" CommandParameter="Add"/>                        <local:AppBarIconButton Text="减少" IconUri="/appbar.cancel.rest.png" Command="{Binding DecreaseItemCommand,Source={StaticResource viewmodel}}"/>                    </local:AppBar>                    <local:AppBar  Width="0" Height="0" >                        <local:AppBarIconButton Text="添加" IconUri="/appbar.new.rest.png" Command="{Binding AddItemCommand,Source={StaticResource viewmodel}}" CommandParameter="Add"/>                        <local:AppBar.Menus>                            <local:AppBarMenuItem Text="减少"  Command="{Binding DecreaseItemCommand,Source={StaticResource viewmodel}}"/>                        </local:AppBar.Menus>                    </local:AppBar>                    <local:AppBar  Width="0" Height="0" >                        <local:AppBarIconButton Text="减少" IconUri="/appbar.cancel.rest.png" Command="{Binding DecreaseItemCommand,Source={StaticResource viewmodel}}"/>                        <local:AppBar.Menus>                            <local:AppBarMenuItem Text="添加"  Command="{Binding AddItemCommand,Source={StaticResource viewmodel}}"  CommandParameter="PivotItem3Add"/>                        </local:AppBar.Menus>                    </local:AppBar>                </local:PivotAppBarBehavior>            </i:Interaction.Behaviors>
  使用与正常的Behavior是一样的,注意第一个AppBar对应第一个PivotItem,第二个AppBar对应第二个PivotItem,以此类推。
   看效果:
  

  示例:AppBarCommand.zip