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

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值