mirror of
https://github.com/farcasclaudiu/CompassVO.git
synced 2026-06-22 09:01:05 +03:00
115 lines
3.9 KiB
C#
115 lines
3.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Markup;
|
|
using System.Windows.Media;
|
|
using Microsoft.Phone.Controls;
|
|
using Microsoft.Phone.Shell;
|
|
|
|
namespace Phone7.Fx.Preview
|
|
{
|
|
[ContentProperty("Buttons")]
|
|
public class BindableApplicationBar : ItemsControl, IApplicationBar
|
|
{
|
|
private readonly ApplicationBar _applicationBar;
|
|
|
|
public BindableApplicationBar()
|
|
{
|
|
_applicationBar = new ApplicationBar();
|
|
this.Loaded += new RoutedEventHandler(BindableApplicationBar_Loaded);
|
|
}
|
|
|
|
void BindableApplicationBar_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
var page =
|
|
this.GetVisualAncestors().Where(c => c is PhoneApplicationPage).FirstOrDefault() as PhoneApplicationPage;
|
|
if (page != null) page.ApplicationBar = _applicationBar;
|
|
}
|
|
|
|
protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
|
{
|
|
base.OnItemsChanged(e);
|
|
_applicationBar.Buttons.Clear();
|
|
_applicationBar.MenuItems.Clear();
|
|
foreach (BindableApplicationBarIconButton button in Items.Where(c => c is BindableApplicationBarIconButton))
|
|
{
|
|
_applicationBar.Buttons.Add(button.Button);
|
|
}
|
|
foreach (BindableApplicationBarMenuItem button in Items.Where(c => c is BindableApplicationBarMenuItem))
|
|
{
|
|
_applicationBar.MenuItems.Add(button.MenuItem);
|
|
}
|
|
}
|
|
|
|
public static readonly DependencyProperty IsVisibleProperty =
|
|
DependencyProperty.RegisterAttached("IsVisible", typeof(bool), typeof(BindableApplicationBar), new PropertyMetadata(true, OnVisibleChanged));
|
|
|
|
private static void OnVisibleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (e.NewValue != e.OldValue)
|
|
{
|
|
((BindableApplicationBar)d)._applicationBar.IsVisible = (bool)e.NewValue;
|
|
}
|
|
}
|
|
|
|
public static readonly DependencyProperty IsMenuEnabledProperty =
|
|
DependencyProperty.RegisterAttached("IsMenuEnabled", typeof(bool), typeof(BindableApplicationBar), new PropertyMetadata(true, OnEnabledChanged));
|
|
|
|
private static void OnEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (e.NewValue != e.OldValue)
|
|
{
|
|
((BindableApplicationBar)d)._applicationBar.IsMenuEnabled = (bool)e.NewValue;
|
|
}
|
|
}
|
|
|
|
public bool IsVisible
|
|
{
|
|
get { return (bool)GetValue(IsVisibleProperty); }
|
|
set { SetValue(IsVisibleProperty, value); }
|
|
}
|
|
|
|
public double BarOpacity
|
|
{
|
|
get { return _applicationBar.Opacity; }
|
|
set { _applicationBar.Opacity = value; }
|
|
}
|
|
|
|
public bool IsMenuEnabled
|
|
{
|
|
get { return (bool)GetValue(IsMenuEnabledProperty); }
|
|
set { SetValue(IsMenuEnabledProperty, value); }
|
|
}
|
|
|
|
public Color BackgroundColor
|
|
{
|
|
get { return _applicationBar.BackgroundColor; }
|
|
set { _applicationBar.BackgroundColor = value; }
|
|
}
|
|
|
|
public Color ForegroundColor
|
|
{
|
|
get { return _applicationBar.ForegroundColor; }
|
|
set { _applicationBar.ForegroundColor = value; }
|
|
}
|
|
|
|
public ApplicationBarMode Mode { get; set; }
|
|
public double DefaultSize { get; private set; }
|
|
public double MiniSize { get; private set; }
|
|
|
|
public IList Buttons
|
|
{
|
|
get { return this.Items; }
|
|
|
|
}
|
|
|
|
public IList MenuItems
|
|
{
|
|
get { return this.Items; }
|
|
}
|
|
|
|
public event EventHandler<ApplicationBarStateChangedEventArgs> StateChanged;
|
|
}
|
|
} |