提交记录修改UI/App.xaml.cs+99 −0看文件
新增UI/Base/Color/ColorTypes.cs+63 −0看文件
新增UI/Base/Color/Colors.cs+54 −0看文件
新增UI/Controls/Base/Icon.cs+46 −0看文件
新增UI/Controls/Base/IconConverter.cs+130 −0看文件
新增UI/Controls/Base/IconTypes.cs+142 −0看文件
新增UI/Controls/Command.cs+39 −0看文件
新增UI/Controls/Navigation/Models/NavigationItemModel.cs+20 −0看文件
新增UI/Controls/Navigation/Navigation.cs+430 −0看文件
新增UI/Controls/Navigation/NavigationItem.cs+139 −0看文件
新增UI/Controls/PageContainer.cs+160 −0看文件
新增UI/Controls/Window/DefaultWindow.cs+228 −0看文件
新增UI/Controls/Window/DefaultWindowCommands.cs+19 −0看文件
新增UI/Controls/Window/HideWindow.cs+19 −0看文件
修改UI/MainWindow.xaml+45 −4看文件
修改UI/MainWindow.xaml.cs+2 −1看文件
新增UI/Models/MainWindowModel.cs+74 −0看文件
新增UI/Models/UINotifyPropertyChanged.cs+26 −0看文件
新增UI/Resources/Fonts/SegMDL2.ttf看文件 新增UI/Resources/Fonts/fabric-icons.ttf看文件 新增UI/TextTemplate.ico看文件 新增UI/Themes/Base/Icon.xaml+26 −0看文件
新增UI/Themes/Generic.xaml+11 −0看文件
新增UI/Themes/Navigation/Navigation.xaml+45 −0看文件
新增UI/Themes/Navigation/NavigationItem.xaml+119 −0看文件
新增UI/Themes/Window/DefaultWindow.xaml+219 −0看文件
新增UI/Themes/Window/HideWindow.xaml+18 −0看文件
修改UI/UI.csproj+56 −0看文件
新增UI/ViewModels/MainViewModel.cs+88 −0看文件
修改UI/packages.config+1 −0看文件
| @@ -5,9 +5,14 @@ using System; | ||
| 5 | 5 | using System.Collections.Generic; |
| 6 | 6 | using System.Configuration; |
| 7 | 7 | using System.Data; |
| 8 | 新增:using System.Drawing; | |
| 8 | 9 | using System.Linq; |
| 9 | 10 | using System.Threading.Tasks; |
| 10 | 11 | using System.Windows; |
| 12 | 新增:using System.Windows.Controls; | |
| 13 | 新增:using System.Windows.Resources; | |
| 14 | 新增:using UI.Controls.Window; | |
| 15 | 新增:using UI.ViewModels; | |
| 11 | 16 | |
| 12 | 17 | namespace UI |
| 13 | 18 | { |
| @@ -17,6 +22,15 @@ namespace UI | ||
| 17 | 22 | public partial class App : Application |
| 18 | 23 | { |
| 19 | 24 | private readonly ServiceProvider serviceProvider; |
| 25 | 新增: | |
| 26 | 新增: // 状态栏图标 | |
| 27 | 新增: private System.Windows.Forms.NotifyIcon statusBarIcon; | |
| 28 | 新增: | |
| 29 | 新增: // 保活窗口 | |
| 30 | 新增: private HideWindow keepaliveWindow; | |
| 31 | 新增: | |
| 32 | 新增: // 状态栏图标菜单 | |
| 33 | 新增: private ContextMenu contextMenu; | |
| 20 | 34 | public App() |
| 21 | 35 | { |
| 22 | 36 | var serviceCollection = new ServiceCollection(); |
| @@ -24,16 +38,101 @@ namespace UI | ||
| 24 | 38 | serviceProvider = serviceCollection.BuildServiceProvider(); |
| 25 | 39 | |
| 26 | 40 | } |
| 41 | 新增: | |
| 42 | 新增: #region 状态栏图标 | |
| 43 | 新增: /// <summary> | |
| 44 | 新增: /// 初始化状态栏图标 | |
| 45 | 新增: /// </summary> | |
| 46 | 新增: private void InitStatusBarIcon() | |
| 47 | 新增: { | |
| 48 | 新增: CreateStatusBarIconMenu(); | |
| 49 | 新增: | |
| 50 | 新增: statusBarIcon = new System.Windows.Forms.NotifyIcon(); | |
| 51 | 新增: | |
| 52 | 新增: statusBarIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon( | |
| 53 | 新增: System.Reflection.Assembly.GetEntryAssembly().ManifestModule.Name); | |
| 54 | 新增: | |
| 55 | 新增: statusBarIcon.Visible = true; | |
| 56 | 新增: statusBarIcon.MouseClick += NotifyIcon_MouseClick; | |
| 57 | 新增: statusBarIcon.MouseDoubleClick += NotifyIcon_MouseDoubleClick; | |
| 58 | 新增: } | |
| 59 | 新增: private void NotifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) | |
| 60 | 新增: { | |
| 61 | 新增: if (e.Button == System.Windows.Forms.MouseButtons.Right) | |
| 62 | 新增: { | |
| 63 | 新增: //右键单击弹出托盘菜单 | |
| 64 | 新增: contextMenu.IsOpen = true; | |
| 65 | 新增: //激活主窗口,用于处理关闭托盘菜单 | |
| 66 | 新增: App.Current.MainWindow.Activate(); | |
| 67 | 新增: } | |
| 68 | 新增: } | |
| 69 | 新增: private void NotifyIcon_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e) | |
| 70 | 新增: { | |
| 71 | 新增: if (e.Button == System.Windows.Forms.MouseButtons.Left) | |
| 72 | 新增: { | |
| 73 | 新增: //双击托盘图标显示主窗口 | |
| 74 | 新增: ShowMainWindow(); | |
| 75 | 新增: } | |
| 76 | 新增: } | |
| 77 | 新增: | |
| 78 | 新增: /// <summary> | |
| 79 | 新增: /// 创建状态栏图标菜单 | |
| 80 | 新增: /// </summary> | |
| 81 | 新增: private void CreateStatusBarIconMenu() | |
| 82 | 新增: { | |
| 83 | 新增: contextMenu = new ContextMenu(); | |
| 84 | 新增: App.Current.Deactivated += (e, c) => | |
| 85 | 新增: { | |
| 86 | 新增: contextMenu.IsOpen = false; | |
| 87 | 新增: }; | |
| 88 | 新增: var mainWindowMenuItem = new MenuItem(); | |
| 89 | 新增: mainWindowMenuItem.Header = "主界面"; | |
| 90 | 新增: mainWindowMenuItem.Click += MainWindowMenuItem_Click; | |
| 91 | 新增: | |
| 92 | 新增: contextMenu.Items.Add(mainWindowMenuItem); | |
| 93 | 新增: } | |
| 94 | 新增: | |
| 95 | 新增: private void MainWindowMenuItem_Click(object sender, RoutedEventArgs e) | |
| 96 | 新增: { | |
| 97 | 新增: ShowMainWindow(); | |
| 98 | 新增: } | |
| 99 | 新增: #endregion | |
| 100 | 新增: | |
| 27 | 101 | private void ConfigureServices(IServiceCollection services) |
| 28 | 102 | { |
| 29 | 103 | services.AddSingleton<IObserver, Observer>(); |
| 30 | 104 | services.AddSingleton<IMain, Main>(); |
| 105 | 新增: | |
| 106 | 新增: services.AddSingleton<MainViewModel>(); | |
| 107 | 新增: services.AddTransient<MainWindow>(); | |
| 31 | 108 | } |
| 32 | 109 | |
| 33 | 110 | private void OnStartup(object sender, StartupEventArgs e) |
| 34 | 111 | { |
| 35 | 112 | var main = serviceProvider.GetService<IMain>(); |
| 36 | 113 | main.Run(); |
| 114 | 新增: | |
| 115 | 新增: // 创建保活窗口 | |
| 116 | 新增: keepaliveWindow = new HideWindow(); | |
| 117 | 新增: keepaliveWindow.Title = "Tai Keepalive"; | |
| 118 | 新增: keepaliveWindow.ShowInTaskbar = false; | |
| 119 | 新增: keepaliveWindow.WindowStyle = WindowStyle.None; | |
| 120 | 新增: keepaliveWindow.OverridesDefaultStyle = true; | |
| 121 | 新增: keepaliveWindow.Show(); | |
| 122 | 新增: | |
| 123 | 新增: InitStatusBarIcon(); | |
| 124 | 新增: } | |
| 125 | 新增: | |
| 126 | 新增: private void ShowMainWindow() | |
| 127 | 新增: { | |
| 128 | 新增: var mainWindow = serviceProvider.GetService<MainWindow>(); | |
| 129 | 新增: var dataContext = serviceProvider.GetService<MainViewModel>(); | |
| 130 | 新增: mainWindow.DataContext = dataContext; | |
| 131 | 新增: dataContext.SelectGroup(-1); | |
| 132 | 新增: ////dataContext.Uri = nameof(IndexPage); | |
| 133 | 新增: mainWindow.WindowStartupLocation = WindowStartupLocation.CenterScreen; | |
| 134 | 新增: mainWindow.Show(); | |
| 135 | 新增: mainWindow.Activate(); | |
| 37 | 136 | } |
| 38 | 137 | } |
| 39 | 138 | } |
| @@ -0,0 +1,63 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Text; | |
| 4 | 新增: | |
| 5 | 新增:namespace UI.Base.Color | |
| 6 | 新增:{ | |
| 7 | 新增: public enum ColorTypes | |
| 8 | 新增: { | |
| 9 | 新增: /// <summary> | |
| 10 | 新增: /// 红色 | |
| 11 | 新增: /// </summary> | |
| 12 | 新增: Red, | |
| 13 | 新增: /// <summary> | |
| 14 | 新增: /// 橙色 | |
| 15 | 新增: /// </summary> | |
| 16 | 新增: Orange, | |
| 17 | 新增: /// <summary> | |
| 18 | 新增: /// 黄色 | |
| 19 | 新增: /// </summary> | |
| 20 | 新增: Yellow, | |
| 21 | 新增: /// <summary> | |
| 22 | 新增: /// 金色 | |
| 23 | 新增: /// </summary> | |
| 24 | 新增: Gold, | |
| 25 | 新增: /// <summary> | |
| 26 | 新增: /// 绿色 | |
| 27 | 新增: /// </summary> | |
| 28 | 新增: Green, | |
| 29 | 新增: /// <summary> | |
| 30 | 新增: /// 碧绿色 | |
| 31 | 新增: /// </summary> | |
| 32 | 新增: Aquamarine, | |
| 33 | 新增: /// <summary> | |
| 34 | 新增: /// 青色 | |
| 35 | 新增: /// </summary> | |
| 36 | 新增: Cyan, | |
| 37 | 新增: /// <summary> | |
| 38 | 新增: /// 蓝色 | |
| 39 | 新增: /// </summary> | |
| 40 | 新增: Blue, | |
| 41 | 新增: /// <summary> | |
| 42 | 新增: /// 紫色 | |
| 43 | 新增: /// </summary> | |
| 44 | 新增: Violet, | |
| 45 | 新增: /// <summary> | |
| 46 | 新增: /// 粉色 | |
| 47 | 新增: /// </summary> | |
| 48 | 新增: Pink, | |
| 49 | 新增: /// <summary> | |
| 50 | 新增: /// 灰色 | |
| 51 | 新增: /// </summary> | |
| 52 | 新增: Gray, | |
| 53 | 新增: /// <summary> | |
| 54 | 新增: /// 黑色 | |
| 55 | 新增: /// </summary> | |
| 56 | 新增: Black, | |
| 57 | 新增: /// <summary> | |
| 58 | 新增: /// 白色 | |
| 59 | 新增: /// </summary> | |
| 60 | 新增: White | |
| 61 | 新增: | |
| 62 | 新增: } | |
| 63 | 新增:} | |
| @@ -0,0 +1,54 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Text; | |
| 4 | 新增:using System.Windows.Media; | |
| 5 | 新增: | |
| 6 | 新增:namespace UI.Base.Color | |
| 7 | 新增:{ | |
| 8 | 新增: public class Colors | |
| 9 | 新增: { | |
| 10 | 新增: public struct IColor | |
| 11 | 新增: { | |
| 12 | 新增: /// <summary> | |
| 13 | 新增: /// 颜色名称 | |
| 14 | 新增: /// </summary> | |
| 15 | 新增: public string Name; | |
| 16 | 新增: /// <summary> | |
| 17 | 新增: /// 颜色 | |
| 18 | 新增: /// </summary> | |
| 19 | 新增: public string Color; | |
| 20 | 新增: } | |
| 21 | 新增: public static Dictionary<ColorTypes, IColor> ColorList = new Dictionary<ColorTypes, IColor>() { | |
| 22 | 新增: {ColorTypes.Aquamarine,new IColor{Name="碧绿", Color="#00AA90"} }, | |
| 23 | 新增: {ColorTypes.Black,new IColor{Name="暗黑", Color="#080808"} }, | |
| 24 | 新增: {ColorTypes.Blue,new IColor{Name="蓝色", Color="#0078d4"} }, | |
| 25 | 新增: {ColorTypes.Cyan,new IColor{Name="青色", Color="#51A8DD"} }, | |
| 26 | 新增: {ColorTypes.Gold,new IColor{Name="金色", Color="#EFBB24"} }, | |
| 27 | 新增: {ColorTypes.Gray,new IColor{Name="灰色", Color="#828282"} }, | |
| 28 | 新增: {ColorTypes.Green,new IColor{Name="绿色", Color="#56C773"} }, | |
| 29 | 新增: {ColorTypes.Orange,new IColor{Name="橙色", Color="#E98B2A"} }, | |
| 30 | 新增: {ColorTypes.Pink,new IColor{Name="粉红", Color="#B5495B"} }, | |
| 31 | 新增: {ColorTypes.Red,new IColor{Name="赤红", Color="#F3221B"} }, | |
| 32 | 新增: {ColorTypes.Violet,new IColor{Name="紫色", Color="#77428D"} }, | |
| 33 | 新增: {ColorTypes.Yellow,new IColor{Name="黄色", Color="#FFC408"} }, | |
| 34 | 新增: {ColorTypes.White,new IColor{Name="白色", Color="#FFFFFF"} }, | |
| 35 | 新增: | |
| 36 | 新增: }; | |
| 37 | 新增: | |
| 38 | 新增: public static IColor Get(ColorTypes color) | |
| 39 | 新增: { | |
| 40 | 新增: return ColorList[color]; | |
| 41 | 新增: } | |
| 42 | 新增: public static SolidColorBrush GetColor(ColorTypes color, double opacity = 1) | |
| 43 | 新增: { | |
| 44 | 新增: return GetFromString(ColorList[color].Color, opacity); | |
| 45 | 新增: } | |
| 46 | 新增: public static SolidColorBrush GetFromString(string color, double opacity = 1) | |
| 47 | 新增: { | |
| 48 | 新增: return new SolidColorBrush((System.Windows.Media.Color)ColorConverter.ConvertFromString(color)) | |
| 49 | 新增: { | |
| 50 | 新增: Opacity = opacity | |
| 51 | 新增: }; | |
| 52 | 新增: } | |
| 53 | 新增: } | |
| 54 | 新增:} | |
| @@ -0,0 +1,46 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Text; | |
| 4 | 新增:using System.Windows; | |
| 5 | 新增:using System.Windows.Controls; | |
| 6 | 新增:using System.Windows.Media; | |
| 7 | 新增: | |
| 8 | 新增:namespace UI.Controls.Base | |
| 9 | 新增:{ | |
| 10 | 新增: public class Icon : Control | |
| 11 | 新增: { | |
| 12 | 新增: public IconTypes IconType | |
| 13 | 新增: { | |
| 14 | 新增: get { return (IconTypes)GetValue(IconTypeProperty); } | |
| 15 | 新增: set { SetValue(IconTypeProperty, value); } | |
| 16 | 新增: } | |
| 17 | 新增: public static readonly DependencyProperty IconTypeProperty = | |
| 18 | 新增: DependencyProperty.Register("IconType", | |
| 19 | 新增: typeof(IconTypes), | |
| 20 | 新增: typeof(Icon), new PropertyMetadata(IconTypes.Back, new PropertyChangedCallback(OnIconTypeChanged))); | |
| 21 | 新增: | |
| 22 | 新增: private static void OnIconTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
| 23 | 新增: { | |
| 24 | 新增: var control = d as Icon; | |
| 25 | 新增: if (e.NewValue != e.OldValue) | |
| 26 | 新增: { | |
| 27 | 新增: control.Unicode = IconConverter.ToUnicode((IconTypes)e.NewValue); | |
| 28 | 新增: } | |
| 29 | 新增: } | |
| 30 | 新增: | |
| 31 | 新增: public string Unicode | |
| 32 | 新增: { | |
| 33 | 新增: get { return (string)GetValue(UnicodeProperty); } | |
| 34 | 新增: set { SetValue(UnicodeProperty, value); } | |
| 35 | 新增: } | |
| 36 | 新增: public static readonly DependencyProperty UnicodeProperty = | |
| 37 | 新增: DependencyProperty.Register("Unicode", | |
| 38 | 新增: typeof(string), | |
| 39 | 新增: typeof(Icon), | |
| 40 | 新增: new PropertyMetadata(IconConverter.ToUnicode(IconTypes.Back))); | |
| 41 | 新增: public Icon() | |
| 42 | 新增: { | |
| 43 | 新增: DefaultStyleKey = typeof(Icon); | |
| 44 | 新增: } | |
| 45 | 新增: } | |
| 46 | 新增:} | |
| @@ -0,0 +1,130 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Linq; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增: | |
| 6 | 新增:namespace UI.Controls.Base | |
| 7 | 新增:{ | |
| 8 | 新增: public class IconConverter | |
| 9 | 新增: { | |
| 10 | 新增: private static Dictionary<IconTypes, string> iconUnicodes = new Dictionary<IconTypes, string>() | |
| 11 | 新增: { | |
| 12 | 新增: {IconTypes.None,""}, | |
| 13 | 新增: {IconTypes.Back,"\xE72B"}, | |
| 14 | 新增: {IconTypes.Calendar,"\xE787"}, | |
| 15 | 新增: {IconTypes.ChevronDown,"\xE70D"}, | |
| 16 | 新增: {IconTypes.CheckMark,"\xE73E"}, | |
| 17 | 新增: {IconTypes.CompletedSolid,"\xEC61"}, | |
| 18 | 新增: {IconTypes.RadioBtnOn,"\xECCB"}, | |
| 19 | 新增: {IconTypes.StatusCircleOuter,"\xF136"}, | |
| 20 | 新增: {IconTypes.AcceptMedium,"\xF78C"}, | |
| 21 | 新增: {IconTypes.Accept,"\xE8FB"}, | |
| 22 | 新增: {IconTypes.Timer,"\xE91E"}, | |
| 23 | 新增: {IconTypes.StatusCircleQuestionMark,"\xF142"}, | |
| 24 | 新增: {IconTypes.ProjectDocument,"\xF759"}, | |
| 25 | 新增: {IconTypes.AutomateFlow,"\xE3F5"}, | |
| 26 | 新增: {IconTypes.FlashAuto,"\xE95C"}, | |
| 27 | 新增: {IconTypes.ProductVariant,"\xEE30"}, | |
| 28 | 新增: {IconTypes.AppIconDefault,"\xECAA"}, | |
| 29 | 新增: {IconTypes.ChromeMinimize,"\xE921"}, | |
| 30 | 新增: {IconTypes.ChromeClose,"\xE8BB"}, | |
| 31 | 新增: {IconTypes.ChromeRestore,"\xE923"}, | |
| 32 | 新增: {IconTypes.CalculatorMultiply,"\xE947"}, | |
| 33 | 新增: {IconTypes.SquareShape,"\xF1A6"}, | |
| 34 | 新增: {IconTypes.More,"\xE712"}, | |
| 35 | 新增: {IconTypes.AppIconDefaultList,"\xEFDE"}, | |
| 36 | 新增: {IconTypes.ClipboardList,"\xF0E3"}, | |
| 37 | 新增: {IconTypes.Settings,"\xE713"}, | |
| 38 | 新增: {IconTypes.ChromeBack,"\xE830"}, | |
| 39 | 新增: {IconTypes.BulletedList,"\xE8FD"}, | |
| 40 | 新增: {IconTypes.CalculatorAddition,"\xE948"}, | |
| 41 | 新增: {IconTypes.DeviceRun,"\xE401"}, | |
| 42 | 新增: {IconTypes.ProcessingRun,"\xE404"}, | |
| 43 | 新增: {IconTypes.Product,"\xECDC"}, | |
| 44 | 新增: {IconTypes.FileTemplate,"\xF2E6"}, | |
| 45 | 新增: {IconTypes.DeviceOff,"\xE402"}, | |
| 46 | 新增: {IconTypes.FlowChart,"\xE9D4"}, | |
| 47 | 新增: {IconTypes.DownloadDocument,"\xF549"}, | |
| 48 | 新增: {IconTypes.Delete,"\xE74D"}, | |
| 49 | 新增: {IconTypes.EditStyle,"\xEF60"}, | |
| 50 | 新增: {IconTypes.OpenWithMirrored,"\xEA5C"}, | |
| 51 | 新增: {IconTypes.FileCode,"\xF30E"}, | |
| 52 | 新增: {IconTypes.BuildIssue,"\xF319"}, | |
| 53 | 新增: {IconTypes.WebEnvironment,"\xE3DB"}, | |
| 54 | 新增: {IconTypes.DesktopScreenshot,"\xF5D9"}, | |
| 55 | 新增: {IconTypes.MusicInCollectionFill,"\xEA36"}, | |
| 56 | 新增: {IconTypes.NetworkTower,"\xEC05"}, | |
| 57 | 新增: {IconTypes.KeyboardClassic,"\xE765"}, | |
| 58 | 新增: {IconTypes.FabricSyncFolder,"\xF0A7"}, | |
| 59 | 新增: {IconTypes.DateTime12,"\xF38F"}, | |
| 60 | 新增: {IconTypes.DateTime,"\xEC92"}, | |
| 61 | 新增: {IconTypes.MyNetwork,"\xEC27"}, | |
| 62 | 新增: {IconTypes.WifiEthernet,"\xEE77"}, | |
| 63 | 新增: {IconTypes.NormalWeight,"\xF4EF"}, | |
| 64 | 新增: {IconTypes.Message,"\xE8BD"}, | |
| 65 | 新增: {IconTypes.Download,"\xE896"}, | |
| 66 | 新增: {IconTypes.Storyboard,"\xF308"}, | |
| 67 | 新增: {IconTypes.HandsFree,"\xEAD0"}, | |
| 68 | 新增: {IconTypes.PlaybackRate1x,"\xEC57"}, | |
| 69 | 新增: {IconTypes.ProcessingCancel,"\xE403"}, | |
| 70 | 新增: {IconTypes.Volume2,"\xE994"}, | |
| 71 | 新增: {IconTypes.Game,"\xE7FC"}, | |
| 72 | 新增: {IconTypes.NewsSearch,"\xF4E9"}, | |
| 73 | 新增: {IconTypes.Share,"\xE72D"}, | |
| 74 | 新增: {IconTypes.PageCheckedin,"\xF104"}, | |
| 75 | 新增: {IconTypes.EntityExtraction,"\xE467"}, | |
| 76 | 新增: {IconTypes.RecycleBin,"\xEF87"}, | |
| 77 | 新增: {IconTypes.Ringer,"\xEA8F"}, | |
| 78 | 新增: {IconTypes.Rocket,"\xF3B3"}, | |
| 79 | 新增: {IconTypes.Robot,"\xE99A"}, | |
| 80 | 新增: {IconTypes.Puzzle,"\xEA86"}, | |
| 81 | 新增: {IconTypes.RainShowersDay,"\xE9C3"}, | |
| 82 | 新增: {IconTypes.Plug,"\xF300"}, | |
| 83 | 新增: {IconTypes.Pinned,"\xE840"}, | |
| 84 | 新增: {IconTypes.PlayerSettings,"\xEF58"}, | |
| 85 | 新增: {IconTypes.Permissions,"\xE8D7"}, | |
| 86 | 新增: {IconTypes.PasswordField,"\xF6AA"}, | |
| 87 | 新增: {IconTypes.OfficeStoreLogo,"\xEDCF"}, | |
| 88 | 新增: {IconTypes.NUIFace,"\xEB68"}, | |
| 89 | 新增: {IconTypes.MyMoviesTV,"\xEE6C"}, | |
| 90 | 新增: {IconTypes.MicrosoftTranslatorLogo,"\xF782"}, | |
| 91 | 新增: {IconTypes.Microphone,"\xE720"}, | |
| 92 | 新增: {IconTypes.MailAlert,"\xED80"}, | |
| 93 | 新增: {IconTypes.Lock,"\xE72E"}, | |
| 94 | 新增: {IconTypes.Lightbulb,"\xEA80"}, | |
| 95 | 新增: {IconTypes.LightningBolt,"\xE945"}, | |
| 96 | 新增: {IconTypes.Insights,"\xE3AF"}, | |
| 97 | 新增: {IconTypes.Home,"\xE80F"}, | |
| 98 | 新增: {IconTypes.Heart,"\xEB51"}, | |
| 99 | 新增: {IconTypes.HeartFill,"\xEB52"}, | |
| 100 | 新增: {IconTypes.Flower,"\xF54E"}, | |
| 101 | 新增: {IconTypes.FieldReadOnly,"\xF442"}, | |
| 102 | 新增: {IconTypes.FangBody,"\xECEB"}, | |
| 103 | 新增: {IconTypes.EventToDoLogo,"\xF869"}, | |
| 104 | 新增: {IconTypes.Emoji,"\xE899"}, | |
| 105 | 新增: {IconTypes.DrillDown,"\xF532"}, | |
| 106 | 新增: {IconTypes.Diamond,"\xED02"}, | |
| 107 | 新增: {IconTypes.Decimals,"\xF218"}, | |
| 108 | 新增: {IconTypes.Crown,"\xED01"}, | |
| 109 | 新增: {IconTypes.Color,"\xE790"}, | |
| 110 | 新增: {IconTypes.CloudSecure,"\xE4D5"}, | |
| 111 | 新增: {IconTypes.CloudImportExport,"\xEE55"}, | |
| 112 | 新增: {IconTypes.Cat,"\xED7F"}, | |
| 113 | 新增: {IconTypes.Car,"\xE804"}, | |
| 114 | 新增: {IconTypes.Bug,"\xEBE8"}, | |
| 115 | 新增: {IconTypes.ChevronUp,"\xE70E"}, | |
| 116 | 新增: {IconTypes.BIDashboard,"\xF543"}, | |
| 117 | 新增: | |
| 118 | 新增: | |
| 119 | 新增: }; | |
| 120 | 新增: public static string ToUnicode(IconTypes iconType) | |
| 121 | 新增: { | |
| 122 | 新增: return iconUnicodes[iconType]; | |
| 123 | 新增: } | |
| 124 | 新增: public static IconTypes ToType(string unicode) | |
| 125 | 新增: { | |
| 126 | 新增: var type = iconUnicodes.Where(m => m.Value == unicode).Select(s => s.Key).FirstOrDefault(); | |
| 127 | 新增: return type; | |
| 128 | 新增: } | |
| 129 | 新增: } | |
| 130 | 新增:} | |
| @@ -0,0 +1,142 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Text; | |
| 4 | 新增: | |
| 5 | 新增:namespace UI.Controls.Base | |
| 6 | 新增:{ | |
| 7 | 新增: /// <summary> | |
| 8 | 新增: /// 图标类型 | |
| 9 | 新增: /// </summary> | |
| 10 | 新增: public enum IconTypes | |
| 11 | 新增: { | |
| 12 | 新增: /// <summary> | |
| 13 | 新增: /// 无 | |
| 14 | 新增: /// </summary> | |
| 15 | 新增: None, | |
| 16 | 新增: /// <summary> | |
| 17 | 新增: /// 返回 | |
| 18 | 新增: /// </summary> | |
| 19 | 新增: Back, | |
| 20 | 新增: /// <summary> | |
| 21 | 新增: /// 日历 | |
| 22 | 新增: /// </summary> | |
| 23 | 新增: Calendar, | |
| 24 | 新增: /// <summary> | |
| 25 | 新增: /// 下V | |
| 26 | 新增: /// </summary> | |
| 27 | 新增: ChevronDown, | |
| 28 | 新增: /// <summary> | |
| 29 | 新增: /// 上V | |
| 30 | 新增: /// </summary> | |
| 31 | 新增: ChevronUp, | |
| 32 | 新增: /// <summary> | |
| 33 | 新增: /// 复选标记 | |
| 34 | 新增: /// </summary> | |
| 35 | 新增: CheckMark, | |
| 36 | 新增: /// <summary> | |
| 37 | 新增: /// 已完成标记 | |
| 38 | 新增: /// </summary> | |
| 39 | 新增: CompletedSolid, | |
| 40 | 新增: /// <summary> | |
| 41 | 新增: /// 单选按钮on | |
| 42 | 新增: /// </summary> | |
| 43 | 新增: RadioBtnOn, | |
| 44 | 新增: StatusCircleOuter, | |
| 45 | 新增: AcceptMedium, | |
| 46 | 新增: Accept, | |
| 47 | 新增: Timer, | |
| 48 | 新增: StatusCircleQuestionMark, | |
| 49 | 新增: ProjectDocument, | |
| 50 | 新增: AutomateFlow, | |
| 51 | 新增: FlashAuto, | |
| 52 | 新增: ProductVariant, | |
| 53 | 新增: AppIconDefault, | |
| 54 | 新增: ChromeMinimize, | |
| 55 | 新增: ChromeClose, | |
| 56 | 新增: ChromeRestore, | |
| 57 | 新增: CalculatorMultiply, | |
| 58 | 新增: SquareShape, | |
| 59 | 新增: More, | |
| 60 | 新增: AppIconDefaultList, | |
| 61 | 新增: ClipboardList, | |
| 62 | 新增: Settings, | |
| 63 | 新增: ChromeBack, | |
| 64 | 新增: BulletedList, | |
| 65 | 新增: CalculatorAddition, | |
| 66 | 新增: DeviceRun, | |
| 67 | 新增: ProcessingRun, | |
| 68 | 新增: Product, | |
| 69 | 新增: FileTemplate, | |
| 70 | 新增: DeviceOff, | |
| 71 | 新增: FlowChart, | |
| 72 | 新增: DownloadDocument, | |
| 73 | 新增: Delete, | |
| 74 | 新增: EditStyle, | |
| 75 | 新增: OpenWithMirrored, | |
| 76 | 新增: FileCode, | |
| 77 | 新增: BuildIssue, | |
| 78 | 新增: WebEnvironment, | |
| 79 | 新增: DesktopScreenshot, | |
| 80 | 新增: MusicInCollectionFill, | |
| 81 | 新增: NetworkTower, | |
| 82 | 新增: KeyboardClassic, | |
| 83 | 新增: FabricSyncFolder, | |
| 84 | 新增: DateTime12, | |
| 85 | 新增: DateTime, | |
| 86 | 新增: MyNetwork, | |
| 87 | 新增: WifiEthernet, | |
| 88 | 新增: NormalWeight, | |
| 89 | 新增: Message, | |
| 90 | 新增: Download, | |
| 91 | 新增: Storyboard, | |
| 92 | 新增: HandsFree, | |
| 93 | 新增: PlaybackRate1x, | |
| 94 | 新增: ProcessingCancel, | |
| 95 | 新增: Volume2, | |
| 96 | 新增: Game, | |
| 97 | 新增: NewsSearch, | |
| 98 | 新增: Share, | |
| 99 | 新增: PageCheckedin, | |
| 100 | 新增: EntityExtraction, | |
| 101 | 新增: RecycleBin, | |
| 102 | 新增: Ringer, | |
| 103 | 新增: Rocket, | |
| 104 | 新增: Robot, | |
| 105 | 新增: Puzzle, | |
| 106 | 新增: RainShowersDay, | |
| 107 | 新增: Plug, | |
| 108 | 新增: Pinned, | |
| 109 | 新增: PlayerSettings, | |
| 110 | 新增: Permissions, | |
| 111 | 新增: PasswordField, | |
| 112 | 新增: OfficeStoreLogo, | |
| 113 | 新增: NUIFace, | |
| 114 | 新增: MyMoviesTV, | |
| 115 | 新增: MicrosoftTranslatorLogo, | |
| 116 | 新增: Microphone, | |
| 117 | 新增: MailAlert, | |
| 118 | 新增: Lock, | |
| 119 | 新增: Lightbulb, | |
| 120 | 新增: LightningBolt, | |
| 121 | 新增: Insights, | |
| 122 | 新增: Home, | |
| 123 | 新增: Heart, | |
| 124 | 新增: HeartFill, | |
| 125 | 新增: Flower, | |
| 126 | 新增: FieldReadOnly, | |
| 127 | 新增: FangBody, | |
| 128 | 新增: EventToDoLogo, | |
| 129 | 新增: Emoji, | |
| 130 | 新增: DrillDown, | |
| 131 | 新增: Diamond, | |
| 132 | 新增: Decimals, | |
| 133 | 新增: Crown, | |
| 134 | 新增: Color, | |
| 135 | 新增: CloudSecure, | |
| 136 | 新增: CloudImportExport, | |
| 137 | 新增: Cat, | |
| 138 | 新增: Car, | |
| 139 | 新增: Bug, | |
| 140 | 新增: BIDashboard | |
| 141 | 新增: } | |
| 142 | 新增:} | |
| @@ -0,0 +1,39 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Linq; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using System.Threading.Tasks; | |
| 6 | 新增:using System.Windows.Input; | |
| 7 | 新增: | |
| 8 | 新增:namespace UI.Controls | |
| 9 | 新增:{ | |
| 10 | 新增: public class Command : ICommand | |
| 11 | 新增: { | |
| 12 | 新增: private Action<object> _action; | |
| 13 | 新增: | |
| 14 | 新增: public Command(Action<object> action) | |
| 15 | 新增: { | |
| 16 | 新增: _action = action; | |
| 17 | 新增: } | |
| 18 | 新增: | |
| 19 | 新增: | |
| 20 | 新增: #region ICommand Members | |
| 21 | 新增: public bool CanExecute(object parameter) | |
| 22 | 新增: { | |
| 23 | 新增: return true; | |
| 24 | 新增: } | |
| 25 | 新增: public event EventHandler CanExecuteChanged; | |
| 26 | 新增: public void Execute(object parameter) | |
| 27 | 新增: { | |
| 28 | 新增: _action(parameter); | |
| 29 | 新增: OnExecuted(); | |
| 30 | 新增: } | |
| 31 | 新增: public delegate void ExecutedHandler(object parameter); | |
| 32 | 新增: public event ExecutedHandler Executed; | |
| 33 | 新增: public void OnExecuted() | |
| 34 | 新增: { | |
| 35 | 新增: Executed?.Invoke(null); | |
| 36 | 新增: } | |
| 37 | 新增: #endregion | |
| 38 | 新增: } | |
| 39 | 新增:} | |
| @@ -0,0 +1,20 @@ | ||
| 1 | 新增: | |
| 2 | 新增:using System; | |
| 3 | 新增:using System.Collections.Generic; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using UI.Base.Color; | |
| 6 | 新增:using UI.Controls.Base; | |
| 7 | 新增: | |
| 8 | 新增:namespace UI.Controls.Navigation.Models | |
| 9 | 新增:{ | |
| 10 | 新增: public class NavigationItemModel | |
| 11 | 新增: { | |
| 12 | 新增: public int ID { get; set; } | |
| 13 | 新增: public string Title { get; set; } | |
| 14 | 新增: public IconTypes Icon { get; set; } | |
| 15 | 新增: public ColorTypes IconColor { get; set; } | |
| 16 | 新增: public string BadgeText { get; set; } | |
| 17 | 新增: public string Uri { get; set; } | |
| 18 | 新增: //public bool IsSelected { get; set; } | |
| 19 | 新增: } | |
| 20 | 新增:} | |
| @@ -0,0 +1,430 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Collections.ObjectModel; | |
| 4 | 新增:using System.Collections.Specialized; | |
| 5 | 新增:using System.Linq; | |
| 6 | 新增:using System.Text; | |
| 7 | 新增:using System.Windows; | |
| 8 | 新增:using System.Windows.Controls; | |
| 9 | 新增:using System.Windows.Media; | |
| 10 | 新增:using System.Windows.Media.Animation; | |
| 11 | 新增:using UI.Controls.Navigation.Models; | |
| 12 | 新增: | |
| 13 | 新增:namespace UI.Controls.Navigation | |
| 14 | 新增:{ | |
| 15 | 新增: public class Navigation : Control | |
| 16 | 新增: { | |
| 17 | 新增: public ContextMenu ItemContextMenu | |
| 18 | 新增: { | |
| 19 | 新增: get { return (ContextMenu)GetValue(ItemContextMenuProperty); } | |
| 20 | 新增: set { SetValue(SelectedItemProperty, value); } | |
| 21 | 新增: } | |
| 22 | 新增: public static readonly DependencyProperty ItemContextMenuProperty = | |
| 23 | 新增: DependencyProperty.Register("ItemContextMenu", typeof(ContextMenu), typeof(Navigation)); | |
| 24 | 新增: | |
| 25 | 新增: public NavigationItemModel SelectedItem | |
| 26 | 新增: { | |
| 27 | 新增: get { return (NavigationItemModel)GetValue(SelectedItemProperty); } | |
| 28 | 新增: set { SetValue(SelectedItemProperty, value); } | |
| 29 | 新增: } | |
| 30 | 新增: public static readonly DependencyProperty SelectedItemProperty = | |
| 31 | 新增: DependencyProperty.Register("SelectedItem", typeof(NavigationItemModel), typeof(Navigation), new PropertyMetadata(new PropertyChangedCallback(OnSelectedItemChanged))); | |
| 32 | 新增: | |
| 33 | 新增: private static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
| 34 | 新增: { | |
| 35 | 新增: var control = d as Navigation; | |
| 36 | 新增: if (e.NewValue != e.OldValue) | |
| 37 | 新增: { | |
| 38 | 新增: var newItem = e.NewValue as NavigationItemModel; | |
| 39 | 新增: var oldItem = e.OldValue as NavigationItemModel; | |
| 40 | 新增: if (newItem != null && control.ItemsDictionary.ContainsKey(newItem.ID)) | |
| 41 | 新增: { | |
| 42 | 新增: control.ItemsDictionary[newItem.ID].IsSelected = true; | |
| 43 | 新增: } | |
| 44 | 新增: if (oldItem != null && control.ItemsDictionary.ContainsKey(oldItem.ID)) | |
| 45 | 新增: { | |
| 46 | 新增: control.ItemsDictionary[oldItem.ID].IsSelected = false; | |
| 47 | 新增: } | |
| 48 | 新增: control.ScrollToActive(); | |
| 49 | 新增: } | |
| 50 | 新增: } | |
| 51 | 新增: | |
| 52 | 新增: public bool IsShowNavigation | |
| 53 | 新增: { | |
| 54 | 新增: get { return (bool)GetValue(IsShowNavigationProperty); } | |
| 55 | 新增: set { SetValue(IsShowNavigationProperty, value); } | |
| 56 | 新增: } | |
| 57 | 新增: public static readonly DependencyProperty IsShowNavigationProperty = | |
| 58 | 新增: DependencyProperty.Register("IsShowNavigation", typeof(bool), typeof(Navigation), new PropertyMetadata(true, new PropertyChangedCallback(OnIsShowNavigationChanged))); | |
| 59 | 新增: | |
| 60 | 新增: private static void OnIsShowNavigationChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
| 61 | 新增: { | |
| 62 | 新增: var control = d as Navigation; | |
| 63 | 新增: if (e.NewValue != e.OldValue) | |
| 64 | 新增: { | |
| 65 | 新增: if (control.IsShowNavigation && control.Visibility == Visibility.Collapsed && control.WindowWidth > 700) | |
| 66 | 新增: { | |
| 67 | 新增: control.Visibility = Visibility.Visible; | |
| 68 | 新增: } | |
| 69 | 新增: if (!control.IsShowNavigation && control.Visibility == Visibility.Visible) | |
| 70 | 新增: { | |
| 71 | 新增: control.Visibility = Visibility.Collapsed; | |
| 72 | 新增: } | |
| 73 | 新增: } | |
| 74 | 新增: } | |
| 75 | 新增: | |
| 76 | 新增: public object TopExtContent | |
| 77 | 新增: { | |
| 78 | 新增: get { return (object)GetValue(TopExtContentProperty); } | |
| 79 | 新增: set { SetValue(TopExtContentProperty, value); } | |
| 80 | 新增: } | |
| 81 | 新增: public static readonly DependencyProperty TopExtContentProperty = | |
| 82 | 新增: DependencyProperty.Register("TopExtContent", typeof(object), typeof(Navigation)); | |
| 83 | 新增: public object BottomExtContent | |
| 84 | 新增: { | |
| 85 | 新增: get { return (object)GetValue(BottomExtContentProperty); } | |
| 86 | 新增: set { SetValue(BottomExtContentProperty, value); } | |
| 87 | 新增: } | |
| 88 | 新增: public static readonly DependencyProperty BottomExtContentProperty = | |
| 89 | 新增: DependencyProperty.Register("BottomExtContent", typeof(object), typeof(Navigation)); | |
| 90 | 新增: public ObservableCollection<NavigationItemModel> Data | |
| 91 | 新增: { | |
| 92 | 新增: get | |
| 93 | 新增: { | |
| 94 | 新增: return (ObservableCollection<NavigationItemModel>)GetValue(DataProperty); | |
| 95 | 新增: } | |
| 96 | 新增: set | |
| 97 | 新增: { | |
| 98 | 新增: SetValue(DataProperty, value); | |
| 99 | 新增: } | |
| 100 | 新增: } | |
| 101 | 新增: public static readonly DependencyProperty DataProperty = | |
| 102 | 新增: DependencyProperty.Register("Data", typeof(ObservableCollection<NavigationItemModel>), typeof(Navigation), new PropertyMetadata(new PropertyChangedCallback(OnDataChanged))); | |
| 103 | 新增: | |
| 104 | 新增: private static void OnDataChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
| 105 | 新增: { | |
| 106 | 新增: var control = d as Navigation; | |
| 107 | 新增: if (e.NewValue != e.OldValue) | |
| 108 | 新增: { | |
| 109 | 新增: if (control.Data != null) | |
| 110 | 新增: { | |
| 111 | 新增: control.Data.CollectionChanged += control.Data_CollectionChanged; | |
| 112 | 新增: } | |
| 113 | 新增: foreach (var item in control.Data) | |
| 114 | 新增: { | |
| 115 | 新增: control.AddItem(item); | |
| 116 | 新增: } | |
| 117 | 新增: } | |
| 118 | 新增: } | |
| 119 | 新增: | |
| 120 | 新增: public double WindowWidth | |
| 121 | 新增: { | |
| 122 | 新增: get | |
| 123 | 新增: { | |
| 124 | 新增: return (double)GetValue(WindowWidthProperty); | |
| 125 | 新增: } | |
| 126 | 新增: set | |
| 127 | 新增: { | |
| 128 | 新增: SetValue(WindowWidthProperty, value); | |
| 129 | 新增: } | |
| 130 | 新增: } | |
| 131 | 新增: public static readonly DependencyProperty WindowWidthProperty = | |
| 132 | 新增: DependencyProperty.Register("WindowWidth", typeof(double), typeof(Navigation), new PropertyMetadata(new PropertyChangedCallback(OnWindowWidthChanged))); | |
| 133 | 新增: | |
| 134 | 新增: private static void OnWindowWidthChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
| 135 | 新增: { | |
| 136 | 新增: var control = d as Navigation; | |
| 137 | 新增: if (control.IsShowNavigation) | |
| 138 | 新增: { | |
| 139 | 新增: if ((double)e.NewValue <= 700) | |
| 140 | 新增: { | |
| 141 | 新增: control.Visibility = Visibility.Collapsed; | |
| 142 | 新增: } | |
| 143 | 新增: else | |
| 144 | 新增: { | |
| 145 | 新增: | |
| 146 | 新增: control.Visibility = Visibility.Visible; | |
| 147 | 新增: } | |
| 148 | 新增: } | |
| 149 | 新增: } | |
| 150 | 新增: | |
| 151 | 新增: | |
| 152 | 新增: #region items property | |
| 153 | 新增: | |
| 154 | 新增: | |
| 155 | 新增: //protected static PropertyChangedCallback ItemsPropertyChangedCallback = new PropertyChangedCallback(ItemsPropertyChanged); | |
| 156 | 新增: | |
| 157 | 新增: //public static DependencyProperty ItemsProperty = DependencyProperty.RegisterAttached("Items", typeof(ObservableCollection<NavigationItemModel>), typeof(Navigation), new PropertyMetadata(null, ItemsPropertyChangedCallback)); | |
| 158 | 新增: | |
| 159 | 新增: //private static void ItemsPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) | |
| 160 | 新增: //{ | |
| 161 | 新增: // var control = (Navigation)sender; | |
| 162 | 新增: // if (control == null) | |
| 163 | 新增: // { | |
| 164 | 新增: // return; | |
| 165 | 新增: // } | |
| 166 | 新增: // control.UnregisterItems(e.OldValue as ObservableCollection<NavigationItemModel>); | |
| 167 | 新增: // control.RegisterItems(e.NewValue as ObservableCollection<NavigationItemModel>); | |
| 168 | 新增: //} | |
| 169 | 新增: | |
| 170 | 新增: //public ObservableCollection<NavigationItemModel> Items | |
| 171 | 新增: //{ | |
| 172 | 新增: // get | |
| 173 | 新增: // { | |
| 174 | 新增: // return (ObservableCollection<NavigationItemModel>)GetValue(ItemsProperty); | |
| 175 | 新增: // } | |
| 176 | 新增: // set | |
| 177 | 新增: // { | |
| 178 | 新增: // SetValue(ItemsProperty, value); | |
| 179 | 新增: // } | |
| 180 | 新增: //} | |
| 181 | 新增: | |
| 182 | 新增: //protected void UnregisterItems(ObservableCollection<NavigationItemModel> items) | |
| 183 | 新增: //{ | |
| 184 | 新增: // if (items == null) | |
| 185 | 新增: // { | |
| 186 | 新增: // return; | |
| 187 | 新增: // } | |
| 188 | 新增: // items.CollectionChanged -= ItemsChanged; | |
| 189 | 新增: //} | |
| 190 | 新增: | |
| 191 | 新增: //protected void RegisterItems(ObservableCollection<NavigationItemModel> items) | |
| 192 | 新增: //{ | |
| 193 | 新增: // if (items == null) | |
| 194 | 新增: // { | |
| 195 | 新增: // return; | |
| 196 | 新增: // } | |
| 197 | 新增: // items.CollectionChanged += ItemsChanged; | |
| 198 | 新增: //} | |
| 199 | 新增: | |
| 200 | 新增: //protected virtual void ItemsChanged(object sender, NotifyCollectionChangedEventArgs e) | |
| 201 | 新增: //{ | |
| 202 | 新增: // if (e.Action == NotifyCollectionChangedAction.Add) | |
| 203 | 新增: // { | |
| 204 | 新增: // foreach (var item in e.NewItems) | |
| 205 | 新增: // { | |
| 206 | 新增: // var data = item as NavigationItemModel; | |
| 207 | 新增: // AddItem(data); | |
| 208 | 新增: // } | |
| 209 | 新增: // } | |
| 210 | 新增: // else if (e.Action == NotifyCollectionChangedAction.Remove) | |
| 211 | 新增: // { | |
| 212 | 新增: // foreach (var item in e.OldItems) | |
| 213 | 新增: // { | |
| 214 | 新增: // var data = item as NavigationItemModel; | |
| 215 | 新增: // RemoveItem(data); | |
| 216 | 新增: // } | |
| 217 | 新增: // } | |
| 218 | 新增: //} | |
| 219 | 新增: #endregion | |
| 220 | 新增: public event RoutedEventHandler OnSelected; | |
| 221 | 新增: public event RoutedEventHandler OnMouseRightButtonUP; | |
| 222 | 新增: | |
| 223 | 新增: private StackPanel ItemsPanel; | |
| 224 | 新增: private Dictionary<int, NavigationItem> ItemsDictionary; | |
| 225 | 新增: | |
| 226 | 新增: // 选中标记块 | |
| 227 | 新增: private Border ActiveBlock; | |
| 228 | 新增: // 动画 | |
| 229 | 新增: Storyboard storyboard; | |
| 230 | 新增: public Navigation() | |
| 231 | 新增: { | |
| 232 | 新增: DefaultStyleKey = typeof(Navigation); | |
| 233 | 新增: ItemsDictionary = new Dictionary<int, NavigationItem>(); | |
| 234 | 新增: storyboard = new Storyboard(); | |
| 235 | 新增: } | |
| 236 | 新增: | |
| 237 | 新增: private void Data_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) | |
| 238 | 新增: { | |
| 239 | 新增: if (e.Action == NotifyCollectionChangedAction.Add) | |
| 240 | 新增: { | |
| 241 | 新增: foreach (var item in e.NewItems) | |
| 242 | 新增: { | |
| 243 | 新增: AddItem(item as NavigationItemModel); | |
| 244 | 新增: } | |
| 245 | 新增: } | |
| 246 | 新增: if (e.Action == NotifyCollectionChangedAction.Remove) | |
| 247 | 新增: { | |
| 248 | 新增: foreach (var item in e.OldItems) | |
| 249 | 新增: { | |
| 250 | 新增: RemoveItem(item as NavigationItemModel); | |
| 251 | 新增: } | |
| 252 | 新增: } | |
| 253 | 新增: if (e.Action == NotifyCollectionChangedAction.Replace) | |
| 254 | 新增: { | |
| 255 | 新增: foreach (var ritem in e.NewItems) | |
| 256 | 新增: { | |
| 257 | 新增: var item = ritem as NavigationItemModel; | |
| 258 | 新增: var id = item.ID; | |
| 259 | 新增: ItemsDictionary[id].Icon = item.Icon; | |
| 260 | 新增: ItemsDictionary[id].Title = item.Title; | |
| 261 | 新增: | |
| 262 | 新增: } | |
| 263 | 新增: } | |
| 264 | 新增: } | |
| 265 | 新增: | |
| 266 | 新增: public override void OnApplyTemplate() | |
| 267 | 新增: { | |
| 268 | 新增: base.OnApplyTemplate(); | |
| 269 | 新增: ItemsPanel = GetTemplateChild("ItemsPanel") as StackPanel; | |
| 270 | 新增: ActiveBlock = GetTemplateChild("ActiveBlock") as Border; | |
| 271 | 新增: | |
| 272 | 新增: Render(); | |
| 273 | 新增: } | |
| 274 | 新增: private int CreateID() | |
| 275 | 新增: { | |
| 276 | 新增: if (ItemsDictionary.Count == 0) | |
| 277 | 新增: { | |
| 278 | 新增: return 1; | |
| 279 | 新增: } | |
| 280 | 新增: return ItemsDictionary.Max(m => m.Key) + 1; | |
| 281 | 新增: } | |
| 282 | 新增: private void AddItem(NavigationItemModel item) | |
| 283 | 新增: { | |
| 284 | 新增: if (ItemsPanel != null) | |
| 285 | 新增: { | |
| 286 | 新增: var navItem = new NavigationItem(); | |
| 287 | 新增: int id = item.ID == null ? CreateID() : item.ID; | |
| 288 | 新增: item.ID = id; | |
| 289 | 新增: navItem.ID = id; | |
| 290 | 新增: navItem.Title = item.Title; | |
| 291 | 新增: navItem.Icon = item.Icon; | |
| 292 | 新增: navItem.IconColor = item.IconColor; | |
| 293 | 新增: navItem.BadgeText = item.BadgeText; | |
| 294 | 新增: navItem.Uri = item.Uri; | |
| 295 | 新增: //navItem.IsSelected = item.IsSelected; | |
| 296 | 新增: if (!string.IsNullOrEmpty(item.Title)) | |
| 297 | 新增: { | |
| 298 | 新增: navItem.MouseUp += NavItem_MouseUp; | |
| 299 | 新增: } | |
| 300 | 新增: ItemsPanel.Children.Add(navItem); | |
| 301 | 新增: ItemsDictionary.Add(id, navItem); | |
| 302 | 新增: //if (item.IsSelected) | |
| 303 | 新增: //{ | |
| 304 | 新增: // SelectedItem = item; | |
| 305 | 新增: //} | |
| 306 | 新增: } | |
| 307 | 新增: } | |
| 308 | 新增: | |
| 309 | 新增: private void NavItem_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e) | |
| 310 | 新增: { | |
| 311 | 新增: var navitem = sender as NavigationItem; | |
| 312 | 新增: if (e.ChangedButton == System.Windows.Input.MouseButton.Left) | |
| 313 | 新增: { | |
| 314 | 新增: //左键选中 | |
| 315 | 新增: SelectedItem = Data.Where(m => m.ID == navitem.ID).FirstOrDefault(); | |
| 316 | 新增: OnSelected?.Invoke(this, null); | |
| 317 | 新增: ScrollToActive(); | |
| 318 | 新增: } | |
| 319 | 新增: if (e.ChangedButton == System.Windows.Input.MouseButton.Right) | |
| 320 | 新增: { | |
| 321 | 新增: //右键 | |
| 322 | 新增: var args = new RoutedEventArgs(); | |
| 323 | 新增: args.RoutedEvent = e.RoutedEvent; | |
| 324 | 新增: args.Source = Data.Where(m => m.ID == navitem.ID).FirstOrDefault(); | |
| 325 | 新增: OnMouseRightButtonUP?.Invoke(this, args); | |
| 326 | 新增: } | |
| 327 | 新增: } | |
| 328 | 新增: | |
| 329 | 新增: private void RemoveItem(NavigationItemModel item) | |
| 330 | 新增: { | |
| 331 | 新增: var navItem = ItemsDictionary[item.ID]; | |
| 332 | 新增: ItemsPanel.Children.Remove(navItem); | |
| 333 | 新增: ItemsDictionary.Remove(item.ID); | |
| 334 | 新增: } | |
| 335 | 新增: private void Render() | |
| 336 | 新增: { | |
| 337 | 新增: if (Data != null) | |
| 338 | 新增: { | |
| 339 | 新增: foreach (var item in Data) | |
| 340 | 新增: { | |
| 341 | 新增: AddItem(item); | |
| 342 | 新增: } | |
| 343 | 新增: | |
| 344 | 新增: } | |
| 345 | 新增: } | |
| 346 | 新增: | |
| 347 | 新增: private void ScrollToActive() | |
| 348 | 新增: { | |
| 349 | 新增: // 获取选中项 | |
| 350 | 新增: if (SelectedItem == null) | |
| 351 | 新增: { | |
| 352 | 新增: return; | |
| 353 | 新增: } | |
| 354 | 新增: var item = ItemsDictionary[SelectedItem.ID]; | |
| 355 | 新增: var index = Data.IndexOf(SelectedItem); | |
| 356 | 新增: | |
| 357 | 新增: //ActiveBlock.Height = item.ActualHeight * Data.Count; | |
| 358 | 新增: | |
| 359 | 新增: // 选中项的坐标 | |
| 360 | 新增: Point relativePoint = item.TransformToAncestor(this).Transform(new Point(0, 0)); | |
| 361 | 新增: | |
| 362 | 新增: // 创建动画 | |
| 363 | 新增: | |
| 364 | 新增: // 设定动画方向 | |
| 365 | 新增: var activeBlockTTF = (ActiveBlock.RenderTransform as TransformGroup).Children[0] as TranslateTransform; | |
| 366 | 新增: | |
| 367 | 新增: //var transformGroup = new TransformGroup(); | |
| 368 | 新增: //transformGroup.Children.Add(new TranslateTransform(0, activeBlockTTF.Y)); | |
| 369 | 新增: //transformGroup.Children.Add(new ScaleTransform(1, 1, 0, 0)); | |
| 370 | 新增: | |
| 371 | 新增: //ActiveBlock.RenderTransform = transformGroup; | |
| 372 | 新增: | |
| 373 | 新增: | |
| 374 | 新增: storyboard.Children.Clear(); | |
| 375 | 新增: DoubleAnimation scrollAnimation = new DoubleAnimation(); | |
| 376 | 新增: //scrollAnimation.From = activeBlockTTF.Y; | |
| 377 | 新增: scrollAnimation.To = relativePoint.Y + 8; | |
| 378 | 新增: | |
| 379 | 新增: scrollAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn }; | |
| 380 | 新增: Storyboard.SetTarget(scrollAnimation, ActiveBlock); | |
| 381 | 新增: Storyboard.SetTargetProperty(scrollAnimation, new PropertyPath("RenderTransform.Children[0].Y")); | |
| 382 | 新增: | |
| 383 | 新增: scrollAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.35)); | |
| 384 | 新增: | |
| 385 | 新增: // 伸缩动画 | |
| 386 | 新增: DoubleAnimation stretchAnimation = new DoubleAnimation(); | |
| 387 | 新增: stretchAnimation.AutoReverse = true; | |
| 388 | 新增: stretchAnimation.To = 1.6; | |
| 389 | 新增: stretchAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn }; | |
| 390 | 新增: Storyboard.SetTarget(stretchAnimation, ActiveBlock); | |
| 391 | 新增: Storyboard.SetTargetProperty(stretchAnimation, new PropertyPath("RenderTransform.Children[1].ScaleY")); | |
| 392 | 新增: stretchAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.35)); | |
| 393 | 新增: | |
| 394 | 新增: if (relativePoint.Y > activeBlockTTF.Y) | |
| 395 | 新增: { | |
| 396 | 新增: // 向下移动 | |
| 397 | 新增: | |
| 398 | 新增: var transformGroup = new TransformGroup(); | |
| 399 | 新增: transformGroup.Children.Add(new TranslateTransform(0, activeBlockTTF.Y)); | |
| 400 | 新增: transformGroup.Children.Add(new ScaleTransform(1, 1, 0, 200)); | |
| 401 | 新增: | |
| 402 | 新增: ActiveBlock.RenderTransform = transformGroup; | |
| 403 | 新增: | |
| 404 | 新增: //stretchAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.3)); | |
| 405 | 新增: | |
| 406 | 新增: | |
| 407 | 新增: } | |
| 408 | 新增: else | |
| 409 | 新增: { | |
| 410 | 新增: var transformGroup = new TransformGroup(); | |
| 411 | 新增: transformGroup.Children.Add(new TranslateTransform(0, activeBlockTTF.Y)); | |
| 412 | 新增: transformGroup.Children.Add(new ScaleTransform(1, 1, 0, 0)); | |
| 413 | 新增: | |
| 414 | 新增: ActiveBlock.RenderTransform = transformGroup; | |
| 415 | 新增: //var transformGroup = new TransformGroup(); | |
| 416 | 新增: //transformGroup.Children.Add(new TranslateTransform(0, activeBlockTTF.Y)); | |
| 417 | 新增: //transformGroup.Children.Add(new ScaleTransform(1, .1, 0, 0)); | |
| 418 | 新增: | |
| 419 | 新增: //ActiveBlock.RenderTransform = transformGroup; | |
| 420 | 新增: } | |
| 421 | 新增: | |
| 422 | 新增: | |
| 423 | 新增: storyboard.Children.Add(stretchAnimation); | |
| 424 | 新增: | |
| 425 | 新增: storyboard.Children.Add(scrollAnimation); | |
| 426 | 新增: | |
| 427 | 新增: storyboard.Begin(); | |
| 428 | 新增: } | |
| 429 | 新增: } | |
| 430 | 新增:} | |
| @@ -0,0 +1,139 @@ | ||
| 1 | 新增: | |
| 2 | 新增:using System; | |
| 3 | 新增:using System.Collections.Generic; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using System.Windows; | |
| 6 | 新增:using System.Windows.Controls; | |
| 7 | 新增:using System.Windows.Input; | |
| 8 | 新增:using System.Windows.Media; | |
| 9 | 新增:using UI.Base.Color; | |
| 10 | 新增:using UI.Controls.Base; | |
| 11 | 新增: | |
| 12 | 新增:namespace UI.Controls.Navigation | |
| 13 | 新增:{ | |
| 14 | 新增: public class NavigationItem : Control | |
| 15 | 新增: { | |
| 16 | 新增: public int ID | |
| 17 | 新增: { | |
| 18 | 新增: get { return (int)GetValue(IDProperty); } | |
| 19 | 新增: set { SetValue(IDProperty, value); } | |
| 20 | 新增: } | |
| 21 | 新增: public static readonly DependencyProperty IDProperty = | |
| 22 | 新增: DependencyProperty.Register("ID", | |
| 23 | 新增: typeof(int), | |
| 24 | 新增: typeof(NavigationItem)); | |
| 25 | 新增: | |
| 26 | 新增: public ICommand Command | |
| 27 | 新增: { | |
| 28 | 新增: get { return (ICommand)GetValue(CommandProperty); } | |
| 29 | 新增: set { SetValue(CommandProperty, value); } | |
| 30 | 新增: } | |
| 31 | 新增: public static readonly DependencyProperty CommandProperty = | |
| 32 | 新增: DependencyProperty.Register("Command", | |
| 33 | 新增: typeof(ICommand), | |
| 34 | 新增: typeof(NavigationItem)); | |
| 35 | 新增: | |
| 36 | 新增: public object CommandParameter | |
| 37 | 新增: { | |
| 38 | 新增: get { return (object)GetValue(CommandParameterProperty); } | |
| 39 | 新增: set { SetValue(CommandParameterProperty, value); } | |
| 40 | 新增: } | |
| 41 | 新增: public static readonly DependencyProperty CommandParameterProperty = | |
| 42 | 新增: DependencyProperty.Register("CommandParameter", | |
| 43 | 新增: typeof(object), | |
| 44 | 新增: typeof(NavigationItem)); | |
| 45 | 新增: public IconTypes Icon | |
| 46 | 新增: { | |
| 47 | 新增: get { return (IconTypes)GetValue(IconProperty); } | |
| 48 | 新增: set { SetValue(IconProperty, value); } | |
| 49 | 新增: } | |
| 50 | 新增: public static readonly DependencyProperty IconProperty = | |
| 51 | 新增: DependencyProperty.Register("Icon", | |
| 52 | 新增: typeof(IconTypes), | |
| 53 | 新增: typeof(NavigationItem), new PropertyMetadata(IconTypes.None)); | |
| 54 | 新增: public ColorTypes IconColor | |
| 55 | 新增: { | |
| 56 | 新增: get { return (ColorTypes)GetValue(IconColorProperty); } | |
| 57 | 新增: set { SetValue(IconColorProperty, value); } | |
| 58 | 新增: } | |
| 59 | 新增: public static readonly DependencyProperty IconColorProperty = | |
| 60 | 新增: DependencyProperty.Register("IconColor", | |
| 61 | 新增: typeof(ColorTypes), | |
| 62 | 新增: typeof(NavigationItem), new PropertyMetadata(ColorTypes.Blue)); | |
| 63 | 新增: public SolidColorBrush IconColorBrush | |
| 64 | 新增: { | |
| 65 | 新增: get { return (SolidColorBrush)GetValue(IconColorBrushProperty); } | |
| 66 | 新增: set { SetValue(IconColorBrushProperty, value); } | |
| 67 | 新增: } | |
| 68 | 新增: public static readonly DependencyProperty IconColorBrushProperty = | |
| 69 | 新增: DependencyProperty.Register("IconColorBrush", | |
| 70 | 新增: typeof(SolidColorBrush), | |
| 71 | 新增: typeof(NavigationItem), new PropertyMetadata(UI.Base.Color.Colors.GetColor(ColorTypes.Blue))); | |
| 72 | 新增: | |
| 73 | 新增: public string Title | |
| 74 | 新增: { | |
| 75 | 新增: get { return (string)GetValue(TitleProperty); } | |
| 76 | 新增: set { SetValue(TitleProperty, value); } | |
| 77 | 新增: } | |
| 78 | 新增: public static readonly DependencyProperty TitleProperty = | |
| 79 | 新增: DependencyProperty.Register("Title", | |
| 80 | 新增: typeof(string), | |
| 81 | 新增: typeof(NavigationItem), new PropertyMetadata(string.Empty)); | |
| 82 | 新增: | |
| 83 | 新增: public string BadgeText | |
| 84 | 新增: { | |
| 85 | 新增: get { return (string)GetValue(BadgeTextProperty); } | |
| 86 | 新增: set { SetValue(BadgeTextProperty, value); } | |
| 87 | 新增: } | |
| 88 | 新增: public static readonly DependencyProperty BadgeTextProperty = | |
| 89 | 新增: DependencyProperty.Register("BadgeText", | |
| 90 | 新增: typeof(string), | |
| 91 | 新增: typeof(NavigationItem), new PropertyMetadata(string.Empty)); | |
| 92 | 新增: public string Uri | |
| 93 | 新增: { | |
| 94 | 新增: get { return (string)GetValue(UriProperty); } | |
| 95 | 新增: set { SetValue(UriProperty, value); } | |
| 96 | 新增: } | |
| 97 | 新增: public static readonly DependencyProperty UriProperty = | |
| 98 | 新增: DependencyProperty.Register("Uri", | |
| 99 | 新增: typeof(string), | |
| 100 | 新增: typeof(NavigationItem), new PropertyMetadata(string.Empty)); | |
| 101 | 新增: | |
| 102 | 新增: public bool IsSelected | |
| 103 | 新增: { | |
| 104 | 新增: get { return (bool)GetValue(IsSelectedProperty); } | |
| 105 | 新增: set { SetValue(IsSelectedProperty, value); } | |
| 106 | 新增: } | |
| 107 | 新增: public static readonly DependencyProperty IsSelectedProperty = | |
| 108 | 新增: DependencyProperty.Register("IsSelected", | |
| 109 | 新增: typeof(bool), | |
| 110 | 新增: typeof(NavigationItem), new PropertyMetadata(false)); | |
| 111 | 新增: | |
| 112 | 新增: public delegate void NavigationEventHandler(object sender, MouseButtonEventArgs e); | |
| 113 | 新增: public event NavigationEventHandler MouseUp; | |
| 114 | 新增: public NavigationItem() | |
| 115 | 新增: { | |
| 116 | 新增: DefaultStyleKey = typeof(NavigationItem); | |
| 117 | 新增: } | |
| 118 | 新增: protected override void OnMouseUp(MouseButtonEventArgs e) | |
| 119 | 新增: { | |
| 120 | 新增: base.OnMouseUp(e); | |
| 121 | 新增: MouseUp?.Invoke(this, e); | |
| 122 | 新增: if (e.ChangedButton == MouseButton.Left) | |
| 123 | 新增: { | |
| 124 | 新增: Command?.Execute(CommandParameter); | |
| 125 | 新增: } | |
| 126 | 新增: } | |
| 127 | 新增: | |
| 128 | 新增: protected override void OnMouseEnter(MouseEventArgs e) | |
| 129 | 新增: { | |
| 130 | 新增: base.OnMouseEnter(e); | |
| 131 | 新增: VisualStateManager.GoToState(this, "MouseOver", true); | |
| 132 | 新增: } | |
| 133 | 新增: protected override void OnMouseLeave(MouseEventArgs e) | |
| 134 | 新增: { | |
| 135 | 新增: base.OnMouseLeave(e); | |
| 136 | 新增: VisualStateManager.GoToState(this, "Normal", true); | |
| 137 | 新增: } | |
| 138 | 新增: } | |
| 139 | 新增:} | |
| @@ -0,0 +1,160 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Diagnostics; | |
| 4 | 新增:using System.Linq; | |
| 5 | 新增:using System.Text; | |
| 6 | 新增:using System.Threading.Tasks; | |
| 7 | 新增:using System.Windows; | |
| 8 | 新增:using System.Windows.Controls; | |
| 9 | 新增:using System.Windows.Input; | |
| 10 | 新增: | |
| 11 | 新增:namespace UI.Controls | |
| 12 | 新增:{ | |
| 13 | 新增: public class PageContainer : Control | |
| 14 | 新增: { | |
| 15 | 新增: #region 依赖属性 | |
| 16 | 新增: public string Title | |
| 17 | 新增: { | |
| 18 | 新增: get { return (string)GetValue(TitleProperty); } | |
| 19 | 新增: set { SetValue(TitleProperty, value); } | |
| 20 | 新增: } | |
| 21 | 新增: public static readonly DependencyProperty TitleProperty = | |
| 22 | 新增: DependencyProperty.Register("Title", | |
| 23 | 新增: typeof(string), | |
| 24 | 新增: typeof(PageContainer)); | |
| 25 | 新增: | |
| 26 | 新增: public IServiceProvider ServiceProvider | |
| 27 | 新增: { | |
| 28 | 新增: get { return (IServiceProvider)GetValue(ServiceProviderProperty); } | |
| 29 | 新增: set { SetValue(ServiceProviderProperty, value); } | |
| 30 | 新增: } | |
| 31 | 新增: public static readonly DependencyProperty ServiceProviderProperty = | |
| 32 | 新增: DependencyProperty.Register("ServiceProvider", typeof(IServiceProvider), typeof(PageContainer)); | |
| 33 | 新增: | |
| 34 | 新增: public object Content | |
| 35 | 新增: { | |
| 36 | 新增: get { return (object)GetValue(ContentProperty); } | |
| 37 | 新增: set { SetValue(ContentProperty, value); } | |
| 38 | 新增: } | |
| 39 | 新增: public static readonly DependencyProperty ContentProperty = | |
| 40 | 新增: DependencyProperty.Register("Content", typeof(object), typeof(PageContainer), new PropertyMetadata("Content undefined!")); | |
| 41 | 新增: | |
| 42 | 新增: public string Uri | |
| 43 | 新增: { | |
| 44 | 新增: get { return (string)GetValue(UriProperty); } | |
| 45 | 新增: set { SetValue(UriProperty, value); } | |
| 46 | 新增: } | |
| 47 | 新增: public static readonly DependencyProperty UriProperty = | |
| 48 | 新增: DependencyProperty.Register("Uri", typeof(string), typeof(PageContainer), new PropertyMetadata(string.Empty, new PropertyChangedCallback(OnUriChanged))); | |
| 49 | 新增: | |
| 50 | 新增: private static void OnUriChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
| 51 | 新增: { | |
| 52 | 新增: var control = d as PageContainer; | |
| 53 | 新增: if (e.NewValue != e.OldValue) | |
| 54 | 新增: { | |
| 55 | 新增: control.LoadPage(); | |
| 56 | 新增: } | |
| 57 | 新增: } | |
| 58 | 新增: | |
| 59 | 新增: public bool IsShowTilteBar | |
| 60 | 新增: { | |
| 61 | 新增: get { return (bool)GetValue(IsShowTilteBarProperty); } | |
| 62 | 新增: set { SetValue(IsShowTilteBarProperty, value); } | |
| 63 | 新增: } | |
| 64 | 新增: public static readonly DependencyProperty IsShowTilteBarProperty = | |
| 65 | 新增: DependencyProperty.Register("IsShowTilteBar", | |
| 66 | 新增: typeof(bool), | |
| 67 | 新增: typeof(PageContainer), new PropertyMetadata(false, new PropertyChangedCallback(OnIsShowTitleBarChanged))); | |
| 68 | 新增: | |
| 69 | 新增: private static void OnIsShowTitleBarChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
| 70 | 新增: { | |
| 71 | 新增: var control = d as PageContainer; | |
| 72 | 新增: if (e.NewValue != e.OldValue) | |
| 73 | 新增: { | |
| 74 | 新增: control.TitleBarVisibility = control.IsShowTilteBar ? Visibility.Visible : Visibility.Collapsed; | |
| 75 | 新增: } | |
| 76 | 新增: } | |
| 77 | 新增: public Visibility TitleBarVisibility | |
| 78 | 新增: { | |
| 79 | 新增: get { return (Visibility)GetValue(TitleBarVisibilityProperty); } | |
| 80 | 新增: set { SetValue(TitleBarVisibilityProperty, value); } | |
| 81 | 新增: } | |
| 82 | 新增: public static readonly DependencyProperty TitleBarVisibilityProperty = | |
| 83 | 新增: DependencyProperty.Register("TitleBarVisibility", | |
| 84 | 新增: typeof(Visibility), | |
| 85 | 新增: typeof(PageContainer), new PropertyMetadata(Visibility.Collapsed)); | |
| 86 | 新增: | |
| 87 | 新增: public Command BackCommand | |
| 88 | 新增: { | |
| 89 | 新增: get { return (Command)GetValue(BackCommandProperty); } | |
| 90 | 新增: set { SetValue(BackCommandProperty, value); } | |
| 91 | 新增: } | |
| 92 | 新增: public static readonly DependencyProperty BackCommandProperty = | |
| 93 | 新增: DependencyProperty.Register("BackCommand", | |
| 94 | 新增: typeof(Command), | |
| 95 | 新增: typeof(PageContainer)); | |
| 96 | 新增: #endregion | |
| 97 | 新增: | |
| 98 | 新增: private readonly string ProjectName; | |
| 99 | 新增: private List<string> Historys; | |
| 100 | 新增: private int Index = -1, OldIndex = -1; | |
| 101 | 新增: private Frame Frame; | |
| 102 | 新增: public PageContainer() | |
| 103 | 新增: { | |
| 104 | 新增: DefaultStyleKey = typeof(PageContainer); | |
| 105 | 新增: ProjectName = App.Current.GetType().Assembly.GetName().Name; | |
| 106 | 新增: Historys = new List<string>(); | |
| 107 | 新增: BackCommand = new Command(new Action<object>(OnBackCommand)); | |
| 108 | 新增: NavigationCommands.BrowseBack.InputGestures.Clear(); | |
| 109 | 新增: NavigationCommands.BrowseForward.InputGestures.Clear(); | |
| 110 | 新增: } | |
| 111 | 新增: | |
| 112 | 新增: private void OnBackCommand(object obj) | |
| 113 | 新增: { | |
| 114 | 新增: if (Index - 1 >= 0) | |
| 115 | 新增: { | |
| 116 | 新增: OldIndex = Index; | |
| 117 | 新增: Index--; | |
| 118 | 新增: Uri = Historys[Index]; | |
| 119 | 新增: Historys.RemoveRange(Index + 1, Historys.Count - (Index + 1)); | |
| 120 | 新增: } | |
| 121 | 新增: } | |
| 122 | 新增: | |
| 123 | 新增: private void LoadPage() | |
| 124 | 新增: { | |
| 125 | 新增: if (Uri != string.Empty) | |
| 126 | 新增: { | |
| 127 | 新增: | |
| 128 | 新增: Type pageType = Type.GetType(ProjectName + ".Views." + Uri); | |
| 129 | 新增: Type pageVMType = Type.GetType(ProjectName + ".ViewModels." + Uri + "VM"); | |
| 130 | 新增: if (pageType != null && ServiceProvider != null) | |
| 131 | 新增: { | |
| 132 | 新增: var page = ServiceProvider.GetService(pageType) as Page; | |
| 133 | 新增: if (page != null) | |
| 134 | 新增: { | |
| 135 | 新增: var pageVM = ServiceProvider.GetService(pageVMType); | |
| 136 | 新增: if (pageVM != null) | |
| 137 | 新增: { | |
| 138 | 新增: page.DataContext = pageVM; | |
| 139 | 新增: } | |
| 140 | 新增: Content = page; | |
| 141 | 新增: //处理历史记录 | |
| 142 | 新增: if (OldIndex == Index) | |
| 143 | 新增: { | |
| 144 | 新增: //新开 | |
| 145 | 新增: Historys.Add(Uri); | |
| 146 | 新增: Index++; | |
| 147 | 新增: } | |
| 148 | 新增: OldIndex = Index; | |
| 149 | 新增: } | |
| 150 | 新增: else | |
| 151 | 新增: { | |
| 152 | 新增: Debug.WriteLine("找不到Page:" + Uri + ",请确认已被注入"); | |
| 153 | 新增: } | |
| 154 | 新增: | |
| 155 | 新增: } | |
| 156 | 新增: | |
| 157 | 新增: } | |
| 158 | 新增: } | |
| 159 | 新增: } | |
| 160 | 新增:} | |
| @@ -0,0 +1,228 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.ComponentModel; | |
| 4 | 新增:using System.Drawing; | |
| 5 | 新增:using System.Linq; | |
| 6 | 新增:using System.Runtime.InteropServices; | |
| 7 | 新增:using System.Text; | |
| 8 | 新增:using System.Threading.Tasks; | |
| 9 | 新增:using System.Windows; | |
| 10 | 新增:using System.Windows.Input; | |
| 11 | 新增:using System.Windows.Interop; | |
| 12 | 新增:using System.Windows.Media; | |
| 13 | 新增:using System.Windows.Media.Imaging; | |
| 14 | 新增: | |
| 15 | 新增:namespace UI.Controls.Window | |
| 16 | 新增:{ | |
| 17 | 新增: public class DefaultWindow : System.Windows.Window | |
| 18 | 新增: { | |
| 19 | 新增: #region 1.依赖属性 | |
| 20 | 新增: | |
| 21 | 新增: | |
| 22 | 新增: #region 最小化按钮显示状态 | |
| 23 | 新增: | |
| 24 | 新增: public static readonly DependencyProperty MinimizeVisibilityProperty = DependencyProperty.Register("MinimizeVisibility", typeof(Visibility), typeof(DefaultWindow)); | |
| 25 | 新增: | |
| 26 | 新增: /// <summary> | |
| 27 | 新增: /// 最小化按钮显示状态 | |
| 28 | 新增: /// </summary> | |
| 29 | 新增: public Visibility MinimizeVisibility | |
| 30 | 新增: { | |
| 31 | 新增: get { return (Visibility)GetValue(MinimizeVisibilityProperty); } | |
| 32 | 新增: set { SetValue(MinimizeVisibilityProperty, value); } | |
| 33 | 新增: } | |
| 34 | 新增: #endregion | |
| 35 | 新增: | |
| 36 | 新增: #region 最大化按钮显示状态 | |
| 37 | 新增: | |
| 38 | 新增: public static readonly DependencyProperty MaximizeVisibilityProperty = DependencyProperty.Register("MaximizeVisibility", typeof(Visibility), typeof(DefaultWindow)); | |
| 39 | 新增: | |
| 40 | 新增: /// <summary> | |
| 41 | 新增: /// 最大化按钮显示状态 | |
| 42 | 新增: /// </summary> | |
| 43 | 新增: public Visibility MaximizeVisibility | |
| 44 | 新增: { | |
| 45 | 新增: get { return (Visibility)GetValue(MaximizeVisibilityProperty); } | |
| 46 | 新增: set { SetValue(MaximizeVisibilityProperty, value); } | |
| 47 | 新增: } | |
| 48 | 新增: #endregion | |
| 49 | 新增: | |
| 50 | 新增: #region 关闭按钮显示状态 | |
| 51 | 新增: | |
| 52 | 新增: public static readonly DependencyProperty CloseVisibilityProperty = DependencyProperty.Register("CloseVisibility", typeof(Visibility), typeof(DefaultWindow)); | |
| 53 | 新增: | |
| 54 | 新增: /// <summary> | |
| 55 | 新增: /// 关闭按钮显示状态 | |
| 56 | 新增: /// </summary> | |
| 57 | 新增: public Visibility CloseVisibility | |
| 58 | 新增: { | |
| 59 | 新增: get { return (Visibility)GetValue(CloseVisibilityProperty); } | |
| 60 | 新增: set { SetValue(CloseVisibilityProperty, value); } | |
| 61 | 新增: } | |
| 62 | 新增: #endregion | |
| 63 | 新增: | |
| 64 | 新增: #region 拓展内容 | |
| 65 | 新增: public static readonly DependencyProperty ExtElementProperty = DependencyProperty.Register("ExtElement", typeof(object), typeof(DefaultWindow)); | |
| 66 | 新增: /// <summary> | |
| 67 | 新增: /// 拓展内容 | |
| 68 | 新增: /// </summary> | |
| 69 | 新增: public object ExtElement | |
| 70 | 新增: { | |
| 71 | 新增: get { return GetValue(ExtElementProperty); } | |
| 72 | 新增: set { SetValue(ExtElementProperty, value); } | |
| 73 | 新增: } | |
| 74 | 新增: #endregion | |
| 75 | 新增: | |
| 76 | 新增: | |
| 77 | 新增: | |
| 78 | 新增: #region 是否穿透窗口 | |
| 79 | 新增: | |
| 80 | 新增: public static readonly DependencyProperty IsThruWindowProperty = DependencyProperty.Register("IsThruWindow", typeof(bool), typeof(DefaultWindow), new PropertyMetadata(false)); | |
| 81 | 新增: | |
| 82 | 新增: /// <summary> | |
| 83 | 新增: /// 是否穿透窗口 | |
| 84 | 新增: /// </summary> | |
| 85 | 新增: public bool IsThruWindow | |
| 86 | 新增: { | |
| 87 | 新增: get { return (bool)GetValue(IsThruWindowProperty); } | |
| 88 | 新增: set { SetValue(IsThruWindowProperty, value); } | |
| 89 | 新增: } | |
| 90 | 新增: #endregion | |
| 91 | 新增: #endregion | |
| 92 | 新增: | |
| 93 | 新增: #region 3.初始化 | |
| 94 | 新增: public DefaultWindow() | |
| 95 | 新增: { | |
| 96 | 新增: this.DefaultStyleKey = typeof(DefaultWindow); | |
| 97 | 新增: //添加当前窗体到窗体集合 | |
| 98 | 新增: | |
| 99 | 新增: //命令绑定 | |
| 100 | 新增: this.CommandBindings.Add(new CommandBinding(DefaultWindowCommands.MinimizeWindowCommand, OnMinimizeWindowCommand)); | |
| 101 | 新增: this.CommandBindings.Add(new CommandBinding(DefaultWindowCommands.MaximizeWindowCommand, OnMaximizeWindowCommand)); | |
| 102 | 新增: this.CommandBindings.Add(new CommandBinding(DefaultWindowCommands.RestoreWindowCommand, OnRestoreWindowCommand)); | |
| 103 | 新增: this.CommandBindings.Add(new CommandBinding(DefaultWindowCommands.CloseWindowCommand, OnCloseWindowCommand)); | |
| 104 | 新增: | |
| 105 | 新增: // 获取程序图标 | |
| 106 | 新增: if (Icon == null) | |
| 107 | 新增: { | |
| 108 | 新增: Icon = ToImageSource(System.Drawing.Icon.ExtractAssociatedIcon( | |
| 109 | 新增: System.Reflection.Assembly.GetEntryAssembly().ManifestModule.Name)); | |
| 110 | 新增: } | |
| 111 | 新增: | |
| 112 | 新增: Loaded += new RoutedEventHandler(window_Loaded); | |
| 113 | 新增: | |
| 114 | 新增: | |
| 115 | 新增: } | |
| 116 | 新增: | |
| 117 | 新增: [DllImport("gdi32.dll", SetLastError = true)] | |
| 118 | 新增: private static extern bool DeleteObject(IntPtr hObject); | |
| 119 | 新增: | |
| 120 | 新增: public static ImageSource ToImageSource(Icon icon) | |
| 121 | 新增: { | |
| 122 | 新增: Bitmap bitmap = icon.ToBitmap(); | |
| 123 | 新增: IntPtr hBitmap = bitmap.GetHbitmap(); | |
| 124 | 新增: | |
| 125 | 新增: ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap( | |
| 126 | 新增: hBitmap, | |
| 127 | 新增: IntPtr.Zero, | |
| 128 | 新增: Int32Rect.Empty, | |
| 129 | 新增: BitmapSizeOptions.FromEmptyOptions()); | |
| 130 | 新增: | |
| 131 | 新增: if (!DeleteObject(hBitmap)) | |
| 132 | 新增: { | |
| 133 | 新增: throw new Win32Exception(); | |
| 134 | 新增: } | |
| 135 | 新增: | |
| 136 | 新增: return wpfBitmap; | |
| 137 | 新增: } | |
| 138 | 新增: | |
| 139 | 新增: private void window_Loaded(object sender, RoutedEventArgs e) | |
| 140 | 新增: { | |
| 141 | 新增: OnSystemButtonsVisibility(); | |
| 142 | 新增: } | |
| 143 | 新增: | |
| 144 | 新增: | |
| 145 | 新增: | |
| 146 | 新增: | |
| 147 | 新增: public override void OnApplyTemplate() | |
| 148 | 新增: { | |
| 149 | 新增: base.OnApplyTemplate(); | |
| 150 | 新增: } | |
| 151 | 新增: | |
| 152 | 新增: | |
| 153 | 新增: /// <summary> | |
| 154 | 新增: /// 根据窗口ResizeMode设置系统按钮的可视状态 | |
| 155 | 新增: /// </summary> | |
| 156 | 新增: private void OnSystemButtonsVisibility() | |
| 157 | 新增: { | |
| 158 | 新增: switch (ResizeMode) | |
| 159 | 新增: { | |
| 160 | 新增: case ResizeMode.NoResize: | |
| 161 | 新增: //仅显示关闭按钮 | |
| 162 | 新增: MinimizeVisibility = Visibility.Collapsed; | |
| 163 | 新增: MaximizeVisibility = Visibility.Collapsed; | |
| 164 | 新增: CloseVisibility = Visibility.Visible; | |
| 165 | 新增: break; | |
| 166 | 新增: case ResizeMode.CanResize: | |
| 167 | 新增: MinimizeVisibility = Visibility.Visible; | |
| 168 | 新增: MaximizeVisibility = Visibility.Visible; | |
| 169 | 新增: CloseVisibility = Visibility.Visible; | |
| 170 | 新增: break; | |
| 171 | 新增: case ResizeMode.CanMinimize: | |
| 172 | 新增: MinimizeVisibility = Visibility.Visible; | |
| 173 | 新增: MaximizeVisibility = Visibility.Collapsed; | |
| 174 | 新增: CloseVisibility = Visibility.Visible; | |
| 175 | 新增: break; | |
| 176 | 新增: } | |
| 177 | 新增: } | |
| 178 | 新增: #endregion | |
| 179 | 新增: | |
| 180 | 新增: #region 5.命令 | |
| 181 | 新增: | |
| 182 | 新增: private void OnCloseWindowCommand(object sender, ExecutedRoutedEventArgs e) | |
| 183 | 新增: { | |
| 184 | 新增: Close(); | |
| 185 | 新增: } | |
| 186 | 新增: | |
| 187 | 新增: private void OnRestoreWindowCommand(object sender, ExecutedRoutedEventArgs e) | |
| 188 | 新增: { | |
| 189 | 新增: WindowState = WindowState.Normal; | |
| 190 | 新增: } | |
| 191 | 新增: | |
| 192 | 新增: private void OnMaximizeWindowCommand(object sender, ExecutedRoutedEventArgs e) | |
| 193 | 新增: { | |
| 194 | 新增: WindowState = WindowState.Maximized; | |
| 195 | 新增: } | |
| 196 | 新增: | |
| 197 | 新增: private void OnMinimizeWindowCommand(object sender, ExecutedRoutedEventArgs e) | |
| 198 | 新增: { | |
| 199 | 新增: WindowState = WindowState.Minimized; | |
| 200 | 新增: } | |
| 201 | 新增: | |
| 202 | 新增: #endregion | |
| 203 | 新增: | |
| 204 | 新增: #region 6.事件 | |
| 205 | 新增: | |
| 206 | 新增: protected override void OnSourceInitialized(EventArgs e) | |
| 207 | 新增: { | |
| 208 | 新增: base.OnSourceInitialized(e); | |
| 209 | 新增: if (IsThruWindow) | |
| 210 | 新增: { | |
| 211 | 新增: IntPtr hwnd = new WindowInteropHelper(this).Handle; uint extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE); | |
| 212 | 新增: SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT); | |
| 213 | 新增: } | |
| 214 | 新增: } | |
| 215 | 新增: #endregion | |
| 216 | 新增: | |
| 217 | 新增: #region win32 | |
| 218 | 新增: private const int WS_EX_TRANSPARENT = 0x20; | |
| 219 | 新增: private const int GWL_EXSTYLE = (-20); | |
| 220 | 新增: | |
| 221 | 新增: [DllImport("user32", EntryPoint = "SetWindowLong")] | |
| 222 | 新增: private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong); | |
| 223 | 新增: | |
| 224 | 新增: [DllImport("user32", EntryPoint = "GetWindowLong")] | |
| 225 | 新增: private static extern uint GetWindowLong(IntPtr hwnd, int nIndex); | |
| 226 | 新增: #endregion | |
| 227 | 新增: } | |
| 228 | 新增:} | |
| @@ -0,0 +1,19 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Linq; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using System.Threading.Tasks; | |
| 6 | 新增:using System.Windows.Input; | |
| 7 | 新增: | |
| 8 | 新增:namespace UI.Controls.Window | |
| 9 | 新增:{ | |
| 10 | 新增: public class DefaultWindowCommands | |
| 11 | 新增: { | |
| 12 | 新增: public static RoutedUICommand MinimizeWindowCommand { get; } = new RoutedUICommand("", "MinimizeWindowCommand", typeof(DefaultWindowCommands)); | |
| 13 | 新增: public static RoutedUICommand RestoreWindowCommand { get; } = new RoutedUICommand("", "RestoreWindowCommand", typeof(DefaultWindowCommands)); | |
| 14 | 新增: public static RoutedUICommand MaximizeWindowCommand { get; } = new RoutedUICommand("", "MaximizeWindowCommand", typeof(DefaultWindowCommands)); | |
| 15 | 新增: public static RoutedUICommand CloseWindowCommand { get; } = new RoutedUICommand("", "CloseWindowCommand", typeof(DefaultWindowCommands)); | |
| 16 | 新增: | |
| 17 | 新增: public static RoutedUICommand LogoButtonClickCommand { get; } = new RoutedUICommand("", "LogoButtonClickCommand", typeof(DefaultWindowCommands)); | |
| 18 | 新增: } | |
| 19 | 新增:} | |
| @@ -0,0 +1,19 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Linq; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using System.Threading.Tasks; | |
| 6 | 新增: | |
| 7 | 新增:namespace UI.Controls.Window | |
| 8 | 新增:{ | |
| 9 | 新增: /// <summary> | |
| 10 | 新增: /// 隐藏窗口 | |
| 11 | 新增: /// </summary> | |
| 12 | 新增: public class HideWindow : System.Windows.Window | |
| 13 | 新增: { | |
| 14 | 新增: public HideWindow() | |
| 15 | 新增: { | |
| 16 | 新增: this.DefaultStyleKey = typeof(HideWindow); | |
| 17 | 新增: } | |
| 18 | 新增: } | |
| 19 | 新增:} | |
| @@ -1,12 +1,53 @@ | ||
| 1 | 删除:<Window x:Class="UI.MainWindow" | |
| 1 | 新增:<ui:DefaultWindow x:Class="UI.MainWindow" | |
| 2 | 2 | xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
| 3 | 3 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
| 4 | 4 | xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
| 5 | 5 | xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
| 6 | 6 | xmlns:local="clr-namespace:UI" |
| 7 | 7 | mc:Ignorable="d" |
| 8 | 删除: Title="MainWindow" Height="450" Width="800"> | |
| 8 | 新增: xmlns:ui="clr-namespace:UI.Controls.Window" | |
| 9 | 新增: Title="Tai - 时间管家" Height="450" Width="800" | |
| 10 | 新增: xmlns:control="clr-namespace:UI.Controls" | |
| 11 | 新增: xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" | |
| 12 | 新增: xmlns:Navigation="clr-namespace:UI.Controls.Navigation" | |
| 13 | 新增: x:Name="Window"> | |
| 9 | 14 | <Grid> |
| 10 | 删除: | |
| 15 | 新增: <!--主要功能--> | |
| 16 | 新增: <Grid> | |
| 17 | 新增: <Grid.ColumnDefinitions> | |
| 18 | 新增: <ColumnDefinition Width="auto"/> | |
| 19 | 新增: <ColumnDefinition Width="*"/> | |
| 20 | 新增: </Grid.ColumnDefinitions> | |
| 21 | 新增: <Navigation:Navigation x:Name="Navigation" Margin="0,32,0,0" Data="{Binding Items,Mode=TwoWay}" Width="80" WindowWidth="{Binding ElementName=Window,Path=ActualWidth}" IsShowNavigation="{Binding IsShowNavigation,Mode=TwoWay}" SelectedItem="{Binding NavSelectedItem,Mode=TwoWay}"> | |
| 22 | 新增: <i:Interaction.Triggers> | |
| 23 | 新增: <i:EventTrigger EventName="OnSelected"> | |
| 24 | 新增: <i:InvokeCommandAction Command="{Binding OnSelectedCommand}" CommandParameter="{Binding ElementName=Navigation}"/> | |
| 25 | 新增: </i:EventTrigger> | |
| 26 | 新增: <i:EventTrigger EventName="OnMouseRightButtonUP"> | |
| 27 | 新增: <!--<vm:EventCommand Command="{Binding OnMouseRightButtonUPCommand}" />--> | |
| 28 | 新增: </i:EventTrigger> | |
| 29 | 新增: </i:Interaction.Triggers> | |
| 30 | 新增: <!--<Navigation:Navigation.TopExtContent> | |
| 31 | 新增: <TextBlock Text="test"/> | |
| 32 | 新增: </Navigation:Navigation.TopExtContent>--> | |
| 33 | 新增: <Navigation:Navigation.BottomExtContent> | |
| 34 | 新增: <Navigation:NavigationItem Icon="Settings" Title="设置" Uri="SettingsPage" Command="{Binding GotoPageCommand}" CommandParameter="SettingsPage"/> | |
| 35 | 新增: </Navigation:Navigation.BottomExtContent> | |
| 36 | 新增: <Navigation:Navigation.ContextMenu> | |
| 37 | 新增: <ContextMenu> | |
| 38 | 新增: <MenuItem Header="新建分组" Command="{Binding ShowGroupModalCommand}"> | |
| 39 | 新增: <!--<MenuItem.Icon> | |
| 40 | 新增: <base:Icon IconType="CalculatorAddition" FontSize="12"/> | |
| 41 | 新增: </MenuItem.Icon>--> | |
| 42 | 新增: </MenuItem> | |
| 43 | 新增: </ContextMenu> | |
| 44 | 新增: </Navigation:Navigation.ContextMenu> | |
| 45 | 新增: </Navigation:Navigation> | |
| 46 | 新增: | |
| 47 | 新增: <Border Grid.Column="1" Background="#f9f9f9" Margin="0,40,10,10" CornerRadius="5" BorderThickness="1,1,1,1" BorderBrush="#ccc"> | |
| 48 | 新增: <control:PageContainer ServiceProvider="{Binding ServiceProvider}" Uri="{Binding Uri,Mode=TwoWay}" Title="{Binding Title}" IsShowTilteBar="{Binding IsShowTitleBar,Mode=TwoWay}"/> | |
| 49 | 新增: </Border> | |
| 50 | 新增: | |
| 51 | 新增: </Grid> | |
| 11 | 52 | </Grid> |
| 12 | 删除:</Window> | |
| 53 | 新增:</ui:DefaultWindow> | |
| @@ -13,13 +13,14 @@ using System.Windows.Media; | ||
| 13 | 13 | using System.Windows.Media.Imaging; |
| 14 | 14 | using System.Windows.Navigation; |
| 15 | 15 | using System.Windows.Shapes; |
| 16 | 新增:using UI.Controls.Window; | |
| 16 | 17 | |
| 17 | 18 | namespace UI |
| 18 | 19 | { |
| 19 | 20 | /// <summary> |
| 20 | 21 | /// MainWindow.xaml 的交互逻辑 |
| 21 | 22 | /// </summary> |
| 22 | 删除: public partial class MainWindow : Window | |
| 23 | 新增: public partial class MainWindow : DefaultWindow | |
| 23 | 24 | { |
| 24 | 25 | public MainWindow() |
| 25 | 26 | { |
| @@ -0,0 +1,74 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Collections.ObjectModel; | |
| 4 | 新增:using System.Linq; | |
| 5 | 新增:using System.Text; | |
| 6 | 新增:using System.Threading.Tasks; | |
| 7 | 新增:using UI.Controls.Navigation.Models; | |
| 8 | 新增: | |
| 9 | 新增:namespace UI.Models | |
| 10 | 新增:{ | |
| 11 | 新增: public class MainWindowModel : UINotifyPropertyChanged | |
| 12 | 新增: { | |
| 13 | 新增: private IServiceProvider ServiceProvider_; | |
| 14 | 新增: public IServiceProvider ServiceProvider | |
| 15 | 新增: { | |
| 16 | 新增: get { return ServiceProvider_; } | |
| 17 | 新增: set { ServiceProvider_ = value; OnPropertyChanged(); } | |
| 18 | 新增: } | |
| 19 | 新增: | |
| 20 | 新增: private string Uri_; | |
| 21 | 新增: public string Uri | |
| 22 | 新增: { | |
| 23 | 新增: get { return Uri_; } | |
| 24 | 新增: set { Uri_ = value; OnPropertyChanged(); } | |
| 25 | 新增: } | |
| 26 | 新增: | |
| 27 | 新增: private object Data_; | |
| 28 | 新增: /// <summary> | |
| 29 | 新增: /// 页面传递数据 | |
| 30 | 新增: /// </summary> | |
| 31 | 新增: public object Data | |
| 32 | 新增: { | |
| 33 | 新增: get { return Data_; } | |
| 34 | 新增: set { Data_ = value; OnPropertyChanged(); } | |
| 35 | 新增: } | |
| 36 | 新增: | |
| 37 | 新增: public ObservableCollection<NavigationItemModel> Items { get; set; } | |
| 38 | 新增: | |
| 39 | 新增: private double NavigationWidth_ = 220; | |
| 40 | 新增: public double NavigationWidth | |
| 41 | 新增: { | |
| 42 | 新增: get { return NavigationWidth_; } | |
| 43 | 新增: set { NavigationWidth_ = value; OnPropertyChanged(); } | |
| 44 | 新增: } | |
| 45 | 新增: | |
| 46 | 新增: private bool IsShowNavigation_ = true; | |
| 47 | 新增: public bool IsShowNavigation | |
| 48 | 新增: { | |
| 49 | 新增: get { return IsShowNavigation_; } | |
| 50 | 新增: set { IsShowNavigation_ = value; OnPropertyChanged(); } | |
| 51 | 新增: } | |
| 52 | 新增: | |
| 53 | 新增: private string Title_; | |
| 54 | 新增: public string Title | |
| 55 | 新增: { | |
| 56 | 新增: get { return Title_; } | |
| 57 | 新增: set { Title_ = value; OnPropertyChanged(); } | |
| 58 | 新增: } | |
| 59 | 新增: private bool IsShowTitleBar_ = false; | |
| 60 | 新增: public bool IsShowTitleBar | |
| 61 | 新增: { | |
| 62 | 新增: get { return IsShowTitleBar_; } | |
| 63 | 新增: set { IsShowTitleBar_ = value; OnPropertyChanged(); } | |
| 64 | 新增: } | |
| 65 | 新增: | |
| 66 | 新增: | |
| 67 | 新增: private NavigationItemModel NavSelectedItem_; | |
| 68 | 新增: public NavigationItemModel NavSelectedItem | |
| 69 | 新增: { | |
| 70 | 新增: get { return NavSelectedItem_; } | |
| 71 | 新增: set { NavSelectedItem_ = value; OnPropertyChanged(); } | |
| 72 | 新增: } | |
| 73 | 新增: } | |
| 74 | 新增:} | |
| @@ -0,0 +1,26 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.ComponentModel; | |
| 4 | 新增:using System.Linq; | |
| 5 | 新增:using System.Runtime.CompilerServices; | |
| 6 | 新增:using System.Text; | |
| 7 | 新增:using System.Threading.Tasks; | |
| 8 | 新增: | |
| 9 | 新增:namespace UI.Models | |
| 10 | 新增:{ | |
| 11 | 新增: public class UINotifyPropertyChanged : INotifyPropertyChanged | |
| 12 | 新增: { | |
| 13 | 新增: public event PropertyChangedEventHandler PropertyChanged; | |
| 14 | 新增: | |
| 15 | 新增: public void OnPropertyChanged([CallerMemberName] string propertyName = "") | |
| 16 | 新增: { | |
| 17 | 新增: | |
| 18 | 新增: PropertyChangedEventHandler handler = PropertyChanged; | |
| 19 | 新增: if (handler != null) | |
| 20 | 新增: { | |
| 21 | 新增: handler.Invoke(this, new PropertyChangedEventArgs(propertyName)); | |
| 22 | 新增: } | |
| 23 | 新增: | |
| 24 | 新增: } | |
| 25 | 新增: } | |
| 26 | 新增:} | |
二进制文件,不显示改动。
二进制文件,不显示改动。
二进制文件,不显示改动。
| @@ -0,0 +1,26 @@ | ||
| 1 | 新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
| 2 | 新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
| 3 | 新增: xmlns:local="clr-namespace:UI.Controls.Base"> | |
| 4 | 新增: <Style TargetType="{x:Type local:Icon}"> | |
| 5 | 新增: <Setter Property="SnapsToDevicePixels" | |
| 6 | 新增: Value="true" /> | |
| 7 | 新增: | |
| 8 | 新增: <Setter Property="MinWidth" Value="18"/> | |
| 9 | 新增: <Setter Property="MinHeight" Value="18"/> | |
| 10 | 新增: <Setter Property="FontSize" Value="16"/> | |
| 11 | 新增: <Setter Property="FontFamily" Value="pack://application:,,,/Tai;component/Resources/Fonts/#Fabric MDL2 Assets"/> | |
| 12 | 新增: <Setter Property="Background" Value="Transparent"/> | |
| 13 | 新增: | |
| 14 | 新增: <Setter Property="Template"> | |
| 15 | 新增: <Setter.Value> | |
| 16 | 新增: <ControlTemplate TargetType="{x:Type local:Icon}"> | |
| 17 | 新增: <Border Background="{TemplateBinding Background}"> | |
| 18 | 新增: | |
| 19 | 新增: <TextBlock Text="{TemplateBinding Unicode}" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" VerticalAlignment="Center" HorizontalAlignment="Center" TextOptions.TextFormattingMode="Ideal" SnapsToDevicePixels="True" /> | |
| 20 | 新增: </Border> | |
| 21 | 新增: | |
| 22 | 新增: </ControlTemplate> | |
| 23 | 新增: </Setter.Value> | |
| 24 | 新增: </Setter> | |
| 25 | 新增: </Style> | |
| 26 | 新增:</ResourceDictionary> | |
| 文件末尾没有换行 | ||
| @@ -0,0 +1,11 @@ | ||
| 1 | 新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
| 2 | 新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> | |
| 3 | 新增: <ResourceDictionary.MergedDictionaries> | |
| 4 | 新增: <ResourceDictionary Source="/Tai;component/Themes/Window/HideWindow.xaml" /> | |
| 5 | 新增: <ResourceDictionary Source="/Tai;component/Themes/Window/DefaultWindow.xaml" /> | |
| 6 | 新增: <ResourceDictionary Source="/Tai;component/Themes/Navigation/NavigationItem.xaml"/> | |
| 7 | 新增: <ResourceDictionary Source="/Tai;component/Themes/Navigation/Navigation.xaml"/> | |
| 8 | 新增: <ResourceDictionary Source="/Tai;component/Themes/Base/Icon.xaml"/> | |
| 9 | 新增: | |
| 10 | 新增: </ResourceDictionary.MergedDictionaries> | |
| 11 | 新增:</ResourceDictionary> | |
| 文件末尾没有换行 | ||
| @@ -0,0 +1,45 @@ | ||
| 1 | 新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
| 2 | 新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
| 3 | 新增: xmlns:local="clr-namespace:UI.Controls.Navigation" | |
| 4 | 新增: > | |
| 5 | 新增: <Style TargetType="{x:Type local:Navigation}"> | |
| 6 | 新增: <Setter Property="SnapsToDevicePixels" | |
| 7 | 新增: Value="true" /> | |
| 8 | 新增: <Setter Property="MinWidth" Value="44"/> | |
| 9 | 新增: <Setter Property="Height" Value="auto"/> | |
| 10 | 新增: <Setter Property="Background" Value="Transparent"/> | |
| 11 | 新增: <Setter Property="Template"> | |
| 12 | 新增: <Setter.Value> | |
| 13 | 新增: <ControlTemplate TargetType="{x:Type local:Navigation}"> | |
| 14 | 新增: <Border Background="{TemplateBinding Background}"> | |
| 15 | 新增: <Grid Margin="10"> | |
| 16 | 新增: <Grid.RowDefinitions> | |
| 17 | 新增: <RowDefinition Height="auto"/> | |
| 18 | 新增: <RowDefinition Height="*"/> | |
| 19 | 新增: <RowDefinition Height="auto"/> | |
| 20 | 新增: | |
| 21 | 新增: </Grid.RowDefinitions> | |
| 22 | 新增: <ContentPresenter Content="{TemplateBinding TopExtContent}"/> | |
| 23 | 新增: <Grid Grid.Row="1" Background="Transparent" x:Name="MenuGrid"> | |
| 24 | 新增: <Border x:Name="ActiveBlock" Width="5" Height="25" CornerRadius="2" Background="#0067c0" HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="9" RenderTransformOrigin="0,0"> | |
| 25 | 新增: <Border.RenderTransform> | |
| 26 | 新增: <TransformGroup> | |
| 27 | 新增: <TranslateTransform X="0" Y="0"></TranslateTransform> | |
| 28 | 新增: <ScaleTransform CenterX="0" CenterY="0" ScaleY="1"/> | |
| 29 | 新增: </TransformGroup> | |
| 30 | 新增: </Border.RenderTransform> | |
| 31 | 新增: </Border> | |
| 32 | 新增: <ScrollViewer VerticalScrollBarVisibility="Auto"> | |
| 33 | 新增: <StackPanel x:Name="ItemsPanel"/> | |
| 34 | 新增: </ScrollViewer> | |
| 35 | 新增: </Grid> | |
| 36 | 新增: | |
| 37 | 新增: <ContentPresenter Content="{TemplateBinding BottomExtContent}" Grid.Row="2"/> | |
| 38 | 新增: </Grid> | |
| 39 | 新增: </Border> | |
| 40 | 新增: | |
| 41 | 新增: </ControlTemplate> | |
| 42 | 新增: </Setter.Value> | |
| 43 | 新增: </Setter> | |
| 44 | 新增: </Style> | |
| 45 | 新增:</ResourceDictionary> | |
| 文件末尾没有换行 | ||
| @@ -0,0 +1,119 @@ | ||
| 1 | 新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
| 2 | 新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
| 3 | 新增: xmlns:local="clr-namespace:UI.Controls.Navigation" | |
| 4 | 新增: xmlns:base="clr-namespace:UI.Controls.Base"> | |
| 5 | 新增: <Style TargetType="{x:Type local:NavigationItem}"> | |
| 6 | 新增: <Setter Property="SnapsToDevicePixels" | |
| 7 | 新增: Value="true" /> | |
| 8 | 新增: <Setter Property="Width" Value="60"/> | |
| 9 | 新增: <!--<Setter Property="MinHeight" Value="44"/>--> | |
| 10 | 新增: <Setter Property="Height" Value="60"/> | |
| 11 | 新增: <Setter Property="Background" Value="Transparent"/> | |
| 12 | 新增: <Setter Property="Template"> | |
| 13 | 新增: <Setter.Value> | |
| 14 | 新增: <ControlTemplate TargetType="{x:Type local:NavigationItem}"> | |
| 15 | 新增: <Border Background="{TemplateBinding Background}" CornerRadius="5" x:Name="Border"> | |
| 16 | 新增: <!--<Border.Background> | |
| 17 | 新增: <SolidColorBrush Color="{TemplateBinding Background}" Opacity="1"/> | |
| 18 | 新增: </Border.Background>--> | |
| 19 | 新增: <VisualStateManager.VisualStateGroups> | |
| 20 | 新增: <VisualStateGroup x:Name="CommonStates"> | |
| 21 | 新增: <VisualStateGroup.Transitions> | |
| 22 | 新增: <VisualTransition GeneratedDuration="0:0:0.15" /> | |
| 23 | 新增: <VisualTransition GeneratedDuration="0" | |
| 24 | 新增: To="Pressed" /> | |
| 25 | 新增: </VisualStateGroup.Transitions> | |
| 26 | 新增: <VisualState x:Name="Normal" /> | |
| 27 | 新增: <VisualState x:Name="MouseOver"> | |
| 28 | 新增: <Storyboard> | |
| 29 | 新增: <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" | |
| 30 | 新增: Storyboard.TargetName="Border"> | |
| 31 | 新增: <EasingColorKeyFrame KeyTime="0" | |
| 32 | 新增: Value="#eaeaea" /> | |
| 33 | 新增: </ColorAnimationUsingKeyFrames> | |
| 34 | 新增: </Storyboard> | |
| 35 | 新增: </VisualState> | |
| 36 | 新增: <VisualState x:Name="Pressed"> | |
| 37 | 新增: | |
| 38 | 新增: </VisualState> | |
| 39 | 新增: </VisualStateGroup> | |
| 40 | 新增: </VisualStateManager.VisualStateGroups> | |
| 41 | 新增: <Grid Margin="5"> | |
| 42 | 新增: <!--<Rectangle x:Name="Line" Height="1" Width="auto" Fill="{DynamicResource SubBorderBrush}" Visibility="Collapsed" Margin="20,0"/>--> | |
| 43 | 新增: <Grid x:Name="Content"> | |
| 44 | 新增: <!--<Grid.ColumnDefinitions> | |
| 45 | 新增: <ColumnDefinition Width="15"/> | |
| 46 | 新增: <ColumnDefinition Width="25"/> | |
| 47 | 新增: <ColumnDefinition Width="*"/> | |
| 48 | 新增: <ColumnDefinition Width="44"/> | |
| 49 | 新增: </Grid.ColumnDefinitions>--> | |
| 50 | 新增: <!--<Rectangle x:Name="CheckMark" Width="2" Fill="{TemplateBinding IconColorBrush}" Visibility="Hidden" Margin="0,10"/>--> | |
| 51 | 新增: <!--<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">--> | |
| 52 | 新增: <!--图标--> | |
| 53 | 新增: <base:Icon x:Name="Icon" IconType="{TemplateBinding Icon}" Foreground="{Binding ElementName=Title,Path=Foreground}" VerticalAlignment="Center" Grid.Column="1" FontSize="20" RenderTransformOrigin="0,0"> | |
| 54 | 新增: <base:Icon.RenderTransform> | |
| 55 | 新增: <TranslateTransform X="0" Y="-5"/> | |
| 56 | 新增: | |
| 57 | 新增: <!--中心点<TranslateTransform X="0" Y="0"/>--> | |
| 58 | 新增: </base:Icon.RenderTransform> | |
| 59 | 新增: </base:Icon> | |
| 60 | 新增: <!--<base:Icon HorizontalAlignment="Center" IconType="{TemplateBinding Icon}" Foreground="Red" Grid.Column="1" FontSize="20" RenderTransformOrigin="0,0"> | |
| 61 | 新增: | |
| 62 | 新增: </base:Icon>--> | |
| 63 | 新增: <!--标题--> | |
| 64 | 新增: <TextBlock x:Name="Title" RenderOptions.EdgeMode="Aliased" Text="{TemplateBinding Title}" Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Center" FontSize="10" Foreground="#5c5c5c" Margin="0,5,0,0"/> | |
| 65 | 新增: <!--</StackPanel>--> | |
| 66 | 新增: <!--徽标--> | |
| 67 | 新增: <!--<TextBlock Text="{TemplateBinding BadgeText}" Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,20,0"/>--> | |
| 68 | 新增: | |
| 69 | 新增: </Grid> | |
| 70 | 新增: </Grid> | |
| 71 | 新增: | |
| 72 | 新增: </Border> | |
| 73 | 新增: <ControlTemplate.Triggers> | |
| 74 | 新增: <Trigger Property="Title" Value="{x:Null}"> | |
| 75 | 新增: <Setter Property="Height" Value="15"/> | |
| 76 | 新增: | |
| 77 | 新增: <!--<Setter Property="Visibility" TargetName="Line" Value="Visible"/>--> | |
| 78 | 新增: <Setter Property="Visibility" TargetName="Content" Value="Collapsed"/> | |
| 79 | 新增: </Trigger> | |
| 80 | 新增: <Trigger Property="IsSelected" Value="True"> | |
| 81 | 新增: <!--<Setter Property="Background" Value="White"/>--> | |
| 82 | 新增: <Setter TargetName="Title" Property="Foreground" Value="#0067c0"/> | |
| 83 | 新增: <Setter TargetName="Title" Property="Visibility" Value="Collapsed"/> | |
| 84 | 新增: | |
| 85 | 新增: <!--<Setter Property="Visibility" TargetName="CheckMark" Value="Visible"/>--> | |
| 86 | 新增: </Trigger> | |
| 87 | 新增: | |
| 88 | 新增: <MultiTrigger> | |
| 89 | 新增: <MultiTrigger.Conditions> | |
| 90 | 新增: <Condition Property="IsSelected" Value="True"/> | |
| 91 | 新增: </MultiTrigger.Conditions> | |
| 92 | 新增: <MultiTrigger.EnterActions> | |
| 93 | 新增: <BeginStoryboard> | |
| 94 | 新增: <Storyboard> | |
| 95 | 新增: <ColorAnimation Duration="0:0:0.3" | |
| 96 | 新增: Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="Border" To="White" /> | |
| 97 | 新增: <DoubleAnimation Duration="0:0:0.2" | |
| 98 | 新增: Storyboard.TargetProperty="(base:Icon.RenderTransform).(TranslateTransform.Y)" Storyboard.TargetName="Icon" To="0" /> | |
| 99 | 新增: </Storyboard> | |
| 100 | 新增: </BeginStoryboard> | |
| 101 | 新增: </MultiTrigger.EnterActions> | |
| 102 | 新增: <MultiTrigger.ExitActions> | |
| 103 | 新增: <BeginStoryboard> | |
| 104 | 新增: <Storyboard> | |
| 105 | 新增: <ColorAnimation Duration="0:0:0.3" | |
| 106 | 新增: Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="Border" To="Transparent" /> | |
| 107 | 新增: <DoubleAnimation Duration="0:0:0.2" | |
| 108 | 新增: Storyboard.TargetProperty="(base:Icon.RenderTransform).(TranslateTransform.Y)" Storyboard.TargetName="Icon" To="-5" /> | |
| 109 | 新增: </Storyboard> | |
| 110 | 新增: </BeginStoryboard> | |
| 111 | 新增: </MultiTrigger.ExitActions> | |
| 112 | 新增: </MultiTrigger> | |
| 113 | 新增: | |
| 114 | 新增: </ControlTemplate.Triggers> | |
| 115 | 新增: </ControlTemplate> | |
| 116 | 新增: </Setter.Value> | |
| 117 | 新增: </Setter> | |
| 118 | 新增: </Style> | |
| 119 | 新增:</ResourceDictionary> | |
| 文件末尾没有换行 | ||
| @@ -0,0 +1,219 @@ | ||
| 1 | 新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
| 2 | 新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
| 3 | 新增: xmlns:w="clr-namespace:UI.Controls.Window"> | |
| 4 | 新增: <Style x:Key="WindowSystemButton" TargetType="{x:Type Button}"> | |
| 5 | 新增: <Setter Property="Background" Value="Transparent"/> | |
| 6 | 新增: <Setter Property="OverridesDefaultStyle" Value="True"/> | |
| 7 | 新增: <Setter Property="VerticalContentAlignment" Value="Center"/> | |
| 8 | 新增: <Setter Property="HorizontalContentAlignment" Value="Center"/> | |
| 9 | 新增: <Setter Property="FontFamily" Value="/Tai;component/Resources/Fonts/#Segoe MDL2 Assets"/> | |
| 10 | 新增: <Setter Property="Foreground" Value="{DynamicResource StandardTextBrush}"/> | |
| 11 | 新增: <!--<Setter Property="FontWeight" Value="Bold"/>--> | |
| 12 | 新增: <Setter Property="FontSize" Value="10"/> | |
| 13 | 新增: | |
| 14 | 新增: <Setter Property="Template"> | |
| 15 | 新增: <Setter.Value> | |
| 16 | 新增: <ControlTemplate TargetType="{x:Type Button}"> | |
| 17 | 新增: <Border | |
| 18 | 新增: Background="{TemplateBinding Background}" | |
| 19 | 新增: SnapsToDevicePixels="true"> | |
| 20 | 新增: <ContentPresenter Name="Presenter" Margin="{TemplateBinding Padding}" | |
| 21 | 新增: VerticalAlignment="{TemplateBinding VerticalContentAlignment}" | |
| 22 | 新增: HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" | |
| 23 | 新增: RecognizesAccessKey="True" | |
| 24 | 新增: SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> | |
| 25 | 新增: </Border> | |
| 26 | 新增: <ControlTemplate.Triggers> | |
| 27 | 新增: <Trigger Property="IsEnabled" Value="false"> | |
| 28 | 新增: <!--<Setter Property="Foreground" Value="{DynamicResource ButtonTextDisabled}"/>--> | |
| 29 | 新增: </Trigger> | |
| 30 | 新增: <Trigger Property="IsMouseOver" Value="True"> | |
| 31 | 新增: <Setter Property="Background" Value="{DynamicResource StandardMouseHoverBrush}" /> | |
| 32 | 新增: <Setter Property="Foreground" Value="{DynamicResource PrimaryColorBrush}"/> | |
| 33 | 新增: </Trigger> | |
| 34 | 新增: <Trigger Property="IsPressed" Value="True"> | |
| 35 | 新增: <Setter Property="Background" Value="{DynamicResource StandardMousePressedBrush}" /> | |
| 36 | 新增: <!--<Setter Property="Background" Value="{DynamicResource ButtonBackgroundPressed}" /> | |
| 37 | 新增: <Setter Property="BorderBrush" Value="{DynamicResource ButtonBorderPressed}"/> | |
| 38 | 新增: <Setter Property="Foreground" Value="{DynamicResource ButtonTextPressed}"/>--> | |
| 39 | 新增: </Trigger> | |
| 40 | 新增: <Trigger Property="IsFocused" Value="true"> | |
| 41 | 新增: <!--<Setter TargetName="Chrome" Property="BorderBrush" Value="{DynamicResource Accent}" />--> | |
| 42 | 新增: </Trigger> | |
| 43 | 新增: </ControlTemplate.Triggers> | |
| 44 | 新增: </ControlTemplate> | |
| 45 | 新增: </Setter.Value> | |
| 46 | 新增: </Setter> | |
| 47 | 新增: </Style> | |
| 48 | 新增: <Style TargetType="{x:Type w:DefaultWindow}"> | |
| 49 | 新增: <Setter Property="BorderThickness" Value="1" /> | |
| 50 | 新增: <Setter Property="BorderBrush" Value="{DynamicResource StandardColorBrush}" /> | |
| 51 | 新增: <Setter Property="Background" Value="White" /> | |
| 52 | 新增: <!--<Setter Property="Logo" Value="{DynamicResource WindowLogo}" />--> | |
| 53 | 新增: <Setter Property="Foreground" Value="{DynamicResource StandardTextBrush}" /> | |
| 54 | 新增: | |
| 55 | 新增: <Setter Property="ResizeMode" Value="CanResizeWithGrip" /> | |
| 56 | 新增: <Setter Property="UseLayoutRounding" Value="True" /> | |
| 57 | 新增: <Setter Property="TextOptions.TextFormattingMode" Value="Display"/> | |
| 58 | 新增: <Setter Property="WindowChrome.WindowChrome"> | |
| 59 | 新增: <Setter.Value> | |
| 60 | 新增: <WindowChrome | |
| 61 | 新增: CaptionHeight="32" | |
| 62 | 新增: CornerRadius="0" GlassFrameThickness="1" UseAeroCaptionButtons="False" NonClientFrameEdges="None" /> | |
| 63 | 新增: </Setter.Value> | |
| 64 | 新增: </Setter> | |
| 65 | 新增: <Setter Property="Template"> | |
| 66 | 新增: <Setter.Value> | |
| 67 | 新增: <ControlTemplate TargetType="{x:Type w:DefaultWindow}"> | |
| 68 | 新增: <ControlTemplate.Resources> | |
| 69 | 新增: | |
| 70 | 新增: <Storyboard x:Key="Storyboardload"> | |
| 71 | 新增: <DoubleAnimation Storyboard.TargetName="WindowBorder" Storyboard.TargetProperty="Opacity" Duration="00:00:0.1" From="0" To="1" > | |
| 72 | 新增: </DoubleAnimation> | |
| 73 | 新增: </Storyboard> | |
| 74 | 新增: | |
| 75 | 新增: </ControlTemplate.Resources> | |
| 76 | 新增: <Border x:Name="WindowBorder" | |
| 77 | 新增: Margin="{Binding Source={x:Static SystemParameters.WindowNonClientFrameThickness}}"> | |
| 78 | 新增: <Border | |
| 79 | 新增: | |
| 80 | 新增: BorderThickness="{TemplateBinding BorderThickness}" | |
| 81 | 新增: BorderBrush="{TemplateBinding BorderBrush}" | |
| 82 | 新增: Background="#f3f3f3" | |
| 83 | 新增: > | |
| 84 | 新增: <AdornerDecorator> | |
| 85 | 新增: <Grid x:Name="WindowContent"> | |
| 86 | 新增: | |
| 87 | 新增: <!--<Grid.RowDefinitions> | |
| 88 | 新增: <RowDefinition Height="Auto"></RowDefinition> | |
| 89 | 新增: <RowDefinition Height="*"></RowDefinition> | |
| 90 | 新增: | |
| 91 | 新增: </Grid.RowDefinitions>--> | |
| 92 | 新增: | |
| 93 | 新增: <!--标题栏--> | |
| 94 | 新增: <Grid | |
| 95 | 新增: x:Name="TitleBar" | |
| 96 | 新增: Panel.ZIndex="999" | |
| 97 | 新增: Height="{DynamicResource WindowTitleBarHeight}" | |
| 98 | 新增: VerticalAlignment="Top"> | |
| 99 | 新增: <Grid.ColumnDefinitions> | |
| 100 | 新增: <ColumnDefinition Width="Auto"></ColumnDefinition> | |
| 101 | 新增: <ColumnDefinition Width="*"></ColumnDefinition> | |
| 102 | 新增: | |
| 103 | 新增: </Grid.ColumnDefinitions> | |
| 104 | 新增: | |
| 105 | 新增: <Grid Grid.Column="0" | |
| 106 | 新增: Panel.ZIndex="3"> | |
| 107 | 新增: <!--标题区域--> | |
| 108 | 新增: <StackPanel Orientation="Horizontal" Margin="15,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Center"> | |
| 109 | 新增: <Image Source="{TemplateBinding Icon}" Stretch="Uniform" Width="18"/> | |
| 110 | 新增: <TextBlock Text="{TemplateBinding Title}" IsEnabled="{TemplateBinding IsActive}" Foreground="#5c5c5c" Margin="15,0,0,0"/> | |
| 111 | 新增: </StackPanel> | |
| 112 | 新增: <!--<TextBlock Text="{TemplateBinding Title}" IsEnabled="{TemplateBinding IsActive}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="15,0,0,0"/>--> | |
| 113 | 新增: | |
| 114 | 新增: </Grid> | |
| 115 | 新增: <Grid Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Top" | |
| 116 | 新增: WindowChrome.IsHitTestVisibleInChrome="True" | |
| 117 | 新增: Panel.ZIndex="3"> | |
| 118 | 新增: <!--系统按钮区域--> | |
| 119 | 新增: | |
| 120 | 新增: <StackPanel Orientation="Horizontal"> | |
| 121 | 新增: <!--最小化--> | |
| 122 | 新增: <Button | |
| 123 | 新增: ToolTip="最小化" | |
| 124 | 新增: Width="46" | |
| 125 | 新增: Height="32" | |
| 126 | 新增: Style="{StaticResource WindowSystemButton}" | |
| 127 | 新增: Content="" | |
| 128 | 新增: Command="{x:Static w:DefaultWindowCommands.MinimizeWindowCommand}" | |
| 129 | 新增: Visibility="{TemplateBinding MinimizeVisibility}"/> | |
| 130 | 新增: | |
| 131 | 新增: <!--最大化--> | |
| 132 | 新增: <Button | |
| 133 | 新增: x:Name="MaximizeButton" | |
| 134 | 新增: ToolTip="最大化" | |
| 135 | 新增: Width="46" | |
| 136 | 新增: Height="32" | |
| 137 | 新增: Style="{StaticResource WindowSystemButton}" | |
| 138 | 新增: Content="" | |
| 139 | 新增: Command="{x:Static w:DefaultWindowCommands.MaximizeWindowCommand}" | |
| 140 | 新增: Visibility="{TemplateBinding MaximizeVisibility}"/> | |
| 141 | 新增: <!--还原--> | |
| 142 | 新增: <Button | |
| 143 | 新增: x:Name="RestoreButton" | |
| 144 | 新增: ToolTip="向下还原" | |
| 145 | 新增: Width="46" | |
| 146 | 新增: Height="32" | |
| 147 | 新增: Style="{StaticResource WindowSystemButton}" | |
| 148 | 新增: Content="" | |
| 149 | 新增: Command="{x:Static w:DefaultWindowCommands.RestoreWindowCommand}" | |
| 150 | 新增: Visibility="Collapsed"/> | |
| 151 | 新增: <!--关闭--> | |
| 152 | 新增: <Button | |
| 153 | 新增: ToolTip="关闭" | |
| 154 | 新增: Width="46" | |
| 155 | 新增: Height="32" | |
| 156 | 新增: Style="{StaticResource WindowSystemButton}" | |
| 157 | 新增: Content="" | |
| 158 | 新增: Command="{x:Static w:DefaultWindowCommands.CloseWindowCommand}" | |
| 159 | 新增: Visibility="{TemplateBinding CloseVisibility}"/> | |
| 160 | 新增: | |
| 161 | 新增: </StackPanel> | |
| 162 | 新增: | |
| 163 | 新增: | |
| 164 | 新增: </Grid> | |
| 165 | 新增: </Grid> | |
| 166 | 新增: | |
| 167 | 新增: | |
| 168 | 新增: | |
| 169 | 新增: <!--窗体内容--> | |
| 170 | 新增: <ContentPresenter Grid.Row="1"/> | |
| 171 | 新增: | |
| 172 | 新增: </Grid> | |
| 173 | 新增: </AdornerDecorator> | |
| 174 | 新增: </Border> | |
| 175 | 新增: </Border> | |
| 176 | 新增: <ControlTemplate.Triggers> | |
| 177 | 新增: <MultiTrigger> | |
| 178 | 新增: <MultiTrigger.Conditions> | |
| 179 | 新增: <Condition Property="WindowState" Value="Normal" /> | |
| 180 | 新增: <Condition Property="MaximizeVisibility" Value="Visible" /> | |
| 181 | 新增: </MultiTrigger.Conditions> | |
| 182 | 新增: <Setter TargetName="MaximizeButton" Property="Visibility" Value="Visible" /> | |
| 183 | 新增: <Setter TargetName="RestoreButton" Property="Visibility" Value="Collapsed" /> | |
| 184 | 新增: </MultiTrigger> | |
| 185 | 新增: <Trigger Property="WindowState" Value="Maximized"> | |
| 186 | 新增: <!--最大化时调整外边距,否则显示不完整--> | |
| 187 | 新增: <Setter TargetName="WindowContent" Property="Margin" Value="7"/> | |
| 188 | 新增: <Setter TargetName="MaximizeButton" Property="Visibility" Value="Collapsed" /> | |
| 189 | 新增: <Setter TargetName="RestoreButton" Property="Visibility" Value="Visible" /> | |
| 190 | 新增: </Trigger> | |
| 191 | 新增: | |
| 192 | 新增: <!--<Trigger Property="WindowState" Value="Normal"> | |
| 193 | 新增: <Setter TargetName="MaximizeButton" Property="Visibility" Value="Visible" /> | |
| 194 | 新增: <Setter TargetName="RestoreButton" Property="Visibility" Value="Collapsed" /> | |
| 195 | 新增: </Trigger>--> | |
| 196 | 新增: <!--<EventTrigger RoutedEvent="Window.Loaded"> | |
| 197 | 新增: --> | |
| 198 | 新增: <!--窗口载入动画--> | |
| 199 | 新增: <!-- | |
| 200 | 新增: <BeginStoryboard Storyboard="{StaticResource Storyboardload}"> | |
| 201 | 新增: </BeginStoryboard> | |
| 202 | 新增: | |
| 203 | 新增: </EventTrigger>--> | |
| 204 | 新增: <Trigger Property="WindowStyle" Value="None"> | |
| 205 | 新增: <Setter TargetName="WindowBorder" Property="Margin" Value="0"/> | |
| 206 | 新增: <Setter Property="BorderThickness" Value="0"/> | |
| 207 | 新增: <Setter TargetName="TitleBar" Property="Visibility" Value="Collapsed" /> | |
| 208 | 新增: <Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True" /> | |
| 209 | 新增: <!--<Setter Property="BorderBrush" Value="Transparent" />--> | |
| 210 | 新增: </Trigger> | |
| 211 | 新增: </ControlTemplate.Triggers> | |
| 212 | 新增: </ControlTemplate> | |
| 213 | 新增: </Setter.Value> | |
| 214 | 新增: </Setter> | |
| 215 | 新增: | |
| 216 | 新增: </Style> | |
| 217 | 新增: | |
| 218 | 新增: | |
| 219 | 新增:</ResourceDictionary> | |
| 文件末尾没有换行 | ||
| @@ -0,0 +1,18 @@ | ||
| 1 | 新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
| 2 | 新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
| 3 | 新增: xmlns:w="clr-namespace:UI.Controls.Window"> | |
| 4 | 新增: <Style TargetType="{x:Type w:HideWindow}"> | |
| 5 | 新增: <Setter Property="Background" Value="Transparent" /> | |
| 6 | 新增: <Setter Property="ResizeMode" Value="NoResize" /> | |
| 7 | 新增: <Setter Property="Width" Value="0" /> | |
| 8 | 新增: <Setter Property="Height" Value="0" /> | |
| 9 | 新增: <Setter Property="Visibility" Value="Collapsed" /> | |
| 10 | 新增: <Setter Property="Template"> | |
| 11 | 新增: <Setter.Value> | |
| 12 | 新增: <ControlTemplate TargetType="{x:Type w:HideWindow}"> | |
| 13 | 新增: <TextBlock Text="test" Foreground="Red"/> | |
| 14 | 新增: </ControlTemplate> | |
| 15 | 新增: </Setter.Value> | |
| 16 | 新增: </Setter> | |
| 17 | 新增: </Style> | |
| 18 | 新增:</ResourceDictionary> | |
| 文件末尾没有换行 | ||
| @@ -34,6 +34,9 @@ | ||
| 34 | 34 | <ErrorReport>prompt</ErrorReport> |
| 35 | 35 | <WarningLevel>4</WarningLevel> |
| 36 | 36 | </PropertyGroup> |
| 37 | 新增: <PropertyGroup> | |
| 38 | 新增: <ApplicationIcon>TextTemplate.ico</ApplicationIcon> | |
| 39 | 新增: </PropertyGroup> | |
| 37 | 40 | <ItemGroup> |
| 38 | 41 | <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> |
| 39 | 42 | <HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.6.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath> |
| @@ -46,12 +49,17 @@ | ||
| 46 | 49 | </Reference> |
| 47 | 50 | <Reference Include="System" /> |
| 48 | 51 | <Reference Include="System.Data" /> |
| 52 | 新增: <Reference Include="System.Drawing" /> | |
| 49 | 53 | <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> |
| 50 | 54 | <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath> |
| 51 | 55 | </Reference> |
| 52 | 56 | <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> |
| 53 | 57 | <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath> |
| 54 | 58 | </Reference> |
| 59 | 新增: <Reference Include="System.Windows.Forms" /> | |
| 60 | 新增: <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> | |
| 61 | 新增: <HintPath>..\packages\Expression.Blend.Sdk.1.0.2\lib\net45\System.Windows.Interactivity.dll</HintPath> | |
| 62 | 新增: </Reference> | |
| 55 | 63 | <Reference Include="System.Xml" /> |
| 56 | 64 | <Reference Include="Microsoft.CSharp" /> |
| 57 | 65 | <Reference Include="System.Core" /> |
| @@ -70,6 +78,17 @@ | ||
| 70 | 78 | <Generator>MSBuild:Compile</Generator> |
| 71 | 79 | <SubType>Designer</SubType> |
| 72 | 80 | </ApplicationDefinition> |
| 81 | 新增: <Compile Include="Base\Color\Colors.cs" /> | |
| 82 | 新增: <Compile Include="Base\Color\ColorTypes.cs" /> | |
| 83 | 新增: <Compile Include="Controls\Base\Icon.cs" /> | |
| 84 | 新增: <Compile Include="Controls\Base\IconConverter.cs" /> | |
| 85 | 新增: <Compile Include="Controls\Base\IconTypes.cs" /> | |
| 86 | 新增: <Compile Include="Controls\Navigation\Models\NavigationItemModel.cs" /> | |
| 87 | 新增: <Compile Include="Controls\Navigation\Navigation.cs" /> | |
| 88 | 新增: <Compile Include="Controls\Navigation\NavigationItem.cs" /> | |
| 89 | 新增: <Compile Include="Models\MainWindowModel.cs" /> | |
| 90 | 新增: <Compile Include="Models\UINotifyPropertyChanged.cs" /> | |
| 91 | 新增: <Compile Include="ViewModels\MainViewModel.cs" /> | |
| 73 | 92 | <Page Include="MainWindow.xaml"> |
| 74 | 93 | <Generator>MSBuild:Compile</Generator> |
| 75 | 94 | <SubType>Designer</SubType> |
| @@ -78,10 +97,39 @@ | ||
| 78 | 97 | <DependentUpon>App.xaml</DependentUpon> |
| 79 | 98 | <SubType>Code</SubType> |
| 80 | 99 | </Compile> |
| 100 | 新增: <Compile Include="Controls\Command.cs" /> | |
| 101 | 新增: <Compile Include="Controls\PageContainer.cs" /> | |
| 102 | 新增: <Compile Include="Controls\Window\DefaultWindow.cs" /> | |
| 103 | 新增: <Compile Include="Controls\Window\DefaultWindowCommands.cs" /> | |
| 104 | 新增: <Compile Include="Controls\Window\HideWindow.cs" /> | |
| 81 | 105 | <Compile Include="MainWindow.xaml.cs"> |
| 82 | 106 | <DependentUpon>MainWindow.xaml</DependentUpon> |
| 83 | 107 | <SubType>Code</SubType> |
| 84 | 108 | </Compile> |
| 109 | 新增: <Page Include="Themes\Base\Icon.xaml"> | |
| 110 | 新增: <Generator>MSBuild:Compile</Generator> | |
| 111 | 新增: <SubType>Designer</SubType> | |
| 112 | 新增: </Page> | |
| 113 | 新增: <Page Include="Themes\Generic.xaml"> | |
| 114 | 新增: <SubType>Designer</SubType> | |
| 115 | 新增: <Generator>MSBuild:Compile</Generator> | |
| 116 | 新增: </Page> | |
| 117 | 新增: <Page Include="Themes\Navigation\Navigation.xaml"> | |
| 118 | 新增: <Generator>MSBuild:Compile</Generator> | |
| 119 | 新增: <SubType>Designer</SubType> | |
| 120 | 新增: </Page> | |
| 121 | 新增: <Page Include="Themes\Navigation\NavigationItem.xaml"> | |
| 122 | 新增: <Generator>MSBuild:Compile</Generator> | |
| 123 | 新增: <SubType>Designer</SubType> | |
| 124 | 新增: </Page> | |
| 125 | 新增: <Page Include="Themes\Window\DefaultWindow.xaml"> | |
| 126 | 新增: <SubType>Designer</SubType> | |
| 127 | 新增: <Generator>MSBuild:Compile</Generator> | |
| 128 | 新增: </Page> | |
| 129 | 新增: <Page Include="Themes\Window\HideWindow.xaml"> | |
| 130 | 新增: <SubType>Designer</SubType> | |
| 131 | 新增: <Generator>MSBuild:Compile</Generator> | |
| 132 | 新增: </Page> | |
| 85 | 133 | </ItemGroup> |
| 86 | 134 | <ItemGroup> |
| 87 | 135 | <Compile Include="Properties\AssemblyInfo.cs"> |
| @@ -106,6 +154,8 @@ | ||
| 106 | 154 | <Generator>SettingsSingleFileGenerator</Generator> |
| 107 | 155 | <LastGenOutput>Settings.Designer.cs</LastGenOutput> |
| 108 | 156 | </None> |
| 157 | 新增: <Resource Include="Resources\Fonts\fabric-icons.ttf" /> | |
| 158 | 新增: <Resource Include="Resources\Fonts\SegMDL2.ttf" /> | |
| 109 | 159 | </ItemGroup> |
| 110 | 160 | <ItemGroup> |
| 111 | 161 | <None Include="App.config" /> |
| @@ -116,5 +166,11 @@ | ||
| 116 | 166 | <Name>Core</Name> |
| 117 | 167 | </ProjectReference> |
| 118 | 168 | </ItemGroup> |
| 169 | 新增: <ItemGroup> | |
| 170 | 新增: <Folder Include="Resources\Icons\" /> | |
| 171 | 新增: </ItemGroup> | |
| 172 | 新增: <ItemGroup> | |
| 173 | 新增: <Resource Include="TextTemplate.ico" /> | |
| 174 | 新增: </ItemGroup> | |
| 119 | 175 | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
| 120 | 176 | </Project> |
| 文件末尾没有换行 | ||
| @@ -0,0 +1,88 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Linq; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using System.Threading.Tasks; | |
| 6 | 新增:using UI.Controls; | |
| 7 | 新增:using UI.Controls.Navigation.Models; | |
| 8 | 新增:using UI.Models; | |
| 9 | 新增: | |
| 10 | 新增:namespace UI.ViewModels | |
| 11 | 新增:{ | |
| 12 | 新增: public class MainViewModel : MainWindowModel | |
| 13 | 新增: { | |
| 14 | 新增: private readonly IServiceProvider serviceProvider; | |
| 15 | 新增: | |
| 16 | 新增: public Command OnSelectedCommand { get; set; } | |
| 17 | 新增: public Command GotoPageCommand { get; set; } | |
| 18 | 新增: | |
| 19 | 新增: public MainViewModel( | |
| 20 | 新增: IServiceProvider serviceProvider | |
| 21 | 新增: ) | |
| 22 | 新增: { | |
| 23 | 新增: this.serviceProvider = serviceProvider; | |
| 24 | 新增: | |
| 25 | 新增: ServiceProvider = serviceProvider; | |
| 26 | 新增: Uri = "IndexPage"; | |
| 27 | 新增: Title = "Project Event"; | |
| 28 | 新增: OnSelectedCommand = new Command(new Action<object>(OnSelectedCommandHandle)); | |
| 29 | 新增: GotoPageCommand = new Command(new Action<object>(OnGotoPageCommand)); | |
| 30 | 新增: | |
| 31 | 新增: | |
| 32 | 新增: Items = new System.Collections.ObjectModel.ObservableCollection<Controls.Navigation.Models.NavigationItemModel>(); | |
| 33 | 新增: | |
| 34 | 新增: PropertyChanged += MainViewModel_PropertyChanged; | |
| 35 | 新增: | |
| 36 | 新增: InitNavigation(); | |
| 37 | 新增: } | |
| 38 | 新增: | |
| 39 | 新增: private void MainViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) | |
| 40 | 新增: { | |
| 41 | 新增: if (e.PropertyName == nameof(Uri)) | |
| 42 | 新增: { | |
| 43 | 新增: //if (Uri == nameof(IndexPage)) | |
| 44 | 新增: //{ | |
| 45 | 新增: // Data = null; | |
| 46 | 新增: //} | |
| 47 | 新增: } | |
| 48 | 新增: } | |
| 49 | 新增: | |
| 50 | 新增: public void SelectGroup(int ID) | |
| 51 | 新增: { | |
| 52 | 新增: NavSelectedItem = Items.Where(m => m.ID == ID).FirstOrDefault(); | |
| 53 | 新增: } | |
| 54 | 新增: | |
| 55 | 新增: | |
| 56 | 新增: private void OnGotoPageCommand(object obj) | |
| 57 | 新增: { | |
| 58 | 新增: Uri = obj.ToString(); | |
| 59 | 新增: } | |
| 60 | 新增: | |
| 61 | 新增: private void OnSelectedCommandHandle(object obj) | |
| 62 | 新增: { | |
| 63 | 新增: if (!string.IsNullOrEmpty(NavSelectedItem.Uri)) | |
| 64 | 新增: { | |
| 65 | 新增: Uri = NavSelectedItem.Uri; | |
| 66 | 新增: } | |
| 67 | 新增: } | |
| 68 | 新增: | |
| 69 | 新增: private void InitNavigation() | |
| 70 | 新增: { | |
| 71 | 新增: Items.Add(new Controls.Navigation.Models.NavigationItemModel() | |
| 72 | 新增: { | |
| 73 | 新增: Icon = Controls.Base.IconTypes.AppIconDefaultList, | |
| 74 | 新增: Title = "概览", | |
| 75 | 新增: ID = -1 | |
| 76 | 新增: | |
| 77 | 新增: }); | |
| 78 | 新增: Items.Add(new Controls.Navigation.Models.NavigationItemModel() | |
| 79 | 新增: { | |
| 80 | 新增: Icon = Controls.Base.IconTypes.BIDashboard, | |
| 81 | 新增: Title = "统计", | |
| 82 | 新增: ID = 1 | |
| 83 | 新增: | |
| 84 | 新增: }); | |
| 85 | 新增: NavSelectedItem = Items[0]; | |
| 86 | 新增: } | |
| 87 | 新增: } | |
| 88 | 新增:} | |
| @@ -1,5 +1,6 @@ | ||
| 1 | 1 | <?xml version="1.0" encoding="utf-8"?> |
| 2 | 2 | <packages> |
| 3 | 新增: <package id="Expression.Blend.Sdk" version="1.0.2" targetFramework="net461" /> | |
| 3 | 4 | <package id="Microsoft.Bcl.AsyncInterfaces" version="6.0.0" targetFramework="net461" /> |
| 4 | 5 | <package id="Microsoft.Extensions.DependencyInjection" version="6.0.0" targetFramework="net461" /> |
| 5 | 6 | <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="6.0.0" targetFramework="net461" /> |

