Pivot是Windows Phone中的常用控件,我们经常需要根据PivotItem的切换使用不同的AppBar,在此我提供一个Behaviors
这个Behavior中保存一个AppBar的列表,并且会监听Pivot的Item切换事件,根据Item显示对应的AppBar,另外还支持
使用与正常的Behavior是一样的,注意第一个AppBar对应第一个PivotItem,第二个AppBar对应第二个PivotItem,以此类推。
来自动管理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;
}
我自定义的一个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>
看效果: