style building

This commit is contained in:
NaBian committed 2019-05-01 22:46:16 +08:00
1 parent d3664e3a32
commit 0cd8529b6c
10 files changed
+293 -22

No files matched your search

@@ -1,4 +1,5 @@
using System.Windows;
using HandyControl.Data;
namespace HandyControl.Controls
{
@@ -6,6 +7,41 @@ namespace HandyControl.Controls
{
private SideMenuItem _selectedItem;
private SideMenuItem _selectedHeader;
public SideMenu()
{
AddHandler(SideMenuItem.SelectedEvent, new RoutedEventHandler(SideMenuItemSelected));
}
private void SideMenuItemSelected(object sender, RoutedEventArgs e)
{
if (e.OriginalSource is SideMenuItem item)
{
if (item.Role == SideMenuItemRole.Item)
{
if (_selectedItem != null)
{
_selectedItem.IsSelected = false;
}
_selectedItem = item;
_selectedItem.IsSelected = true;
}
else
{
if (_selectedHeader != null)
{
_selectedHeader.IsSelected = false;
}
_selectedHeader = item;
_selectedHeader.IsSelected = true;
_selectedHeader.SelectDefaultItem(_selectedItem);
}
}
}
protected override DependencyObject GetContainerForItemOverride() => new SideMenuItem();
protected override bool IsItemItsOwnContainerOverride(object item) => item is SideMenuItem;
@@ -1,10 +1,14 @@
using System.Windows;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using HandyControl.Data;
namespace HandyControl.Controls
{
public class SideMenuItem : HeaderedSimpleItemsControl, ISelectable
{
private bool _isMouseLeftButtonDown;
public static readonly DependencyProperty IconProperty = DependencyProperty.Register(
"Icon", typeof(object), typeof(SideMenuItem), new PropertyMetadata(default(object)));
@@ -35,21 +39,59 @@ namespace HandyControl.Controls
set => SetValue(IsSelectedProperty, value);
}
private static readonly DependencyPropertyKey RolePropertyKey =
DependencyProperty.RegisterReadOnly(nameof(Role), typeof(SideMenuItemRole), typeof(SideMenuItem),
new PropertyMetadata(SideMenuItemRole.Header));
public static readonly DependencyProperty RoleProperty = DependencyProperty.Register(
"Role", typeof(SideMenuItemRole), typeof(SideMenuItem), new PropertyMetadata(default(SideMenuItemRole)));
public static readonly DependencyProperty RoleProperty = RolePropertyKey.DependencyProperty;
public SideMenuItemRole Role => (SideMenuItemRole) GetValue(RoleProperty);
public SideMenuItemRole Role
{
get => (SideMenuItemRole) GetValue(RoleProperty);
internal set => SetValue(RoleProperty, value);
}
protected override DependencyObject GetContainerForItemOverride() => new SideMenuItem();
protected override bool IsItemItsOwnContainerOverride(object item) => item is SideMenuItem;
private void UpdateRole()
protected override void OnMouseLeave(MouseEventArgs e)
{
base.OnMouseLeave(e);
_isMouseLeftButtonDown = false;
}
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
_isMouseLeftButtonDown = true;
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
if (_isMouseLeftButtonDown)
{
if (!IsSelected)
{
IsSelected = true;
OnSelected(new RoutedEventArgs(SelectedEvent, this));
}
_isMouseLeftButtonDown = false;
}
}
internal void SelectDefaultItem(SideMenuItem menuItem)
{
if (Role == SideMenuItemRole.Header && ItemsHost.Children.Count > 0)
{
if (ItemsHost.Children.Contains(menuItem)) return;
var item = ItemsHost.Children.OfType<SideMenuItem>().FirstOrDefault();
if (item != null && !item.IsSelected)
{
item.OnSelected(new RoutedEventArgs(SelectedEvent, item));
}
}
}
}
}