提交记录修改UI/Controls/Window/DefaultWindow.cs+122 −2看文件
修改UI/MainWindow.xaml+5 −2看文件
修改UI/Models/MainWindowModel.cs+10 −0看文件
修改UI/Themes/Window/DefaultWindow.xaml+33 −4看文件
修改UI/ViewModels/MainViewModel.cs+8 −0看文件
| @@ -7,16 +7,55 @@ using System.Runtime.InteropServices; | ||
| 7 | 7 | using System.Text; |
| 8 | 8 | using System.Threading.Tasks; |
| 9 | 9 | using System.Windows; |
| 10 | 新增:using System.Windows.Controls; | |
| 10 | 11 | using System.Windows.Input; |
| 11 | 12 | using System.Windows.Interop; |
| 12 | 13 | using System.Windows.Media; |
| 14 | 新增:using System.Windows.Media.Animation; | |
| 13 | 15 | using System.Windows.Media.Imaging; |
| 16 | 新增:using System.Windows.Threading; | |
| 14 | 17 | |
| 15 | 18 | namespace UI.Controls.Window |
| 16 | 19 | { |
| 17 | 20 | public class DefaultWindow : System.Windows.Window |
| 18 | 21 | { |
| 19 | 22 | #region 1.依赖属性 |
| 23 | 新增: public static readonly DependencyProperty IsShowToastDeproperty = DependencyProperty.Register("IsShowToast", typeof(bool), typeof(DefaultWindow), new PropertyMetadata(false, new PropertyChangedCallback(OnIsShowToastChanged))); | |
| 24 | 新增: public bool IsShowToast { get { return (bool)GetValue(IsShowToastDeproperty); } set { SetValue(IsShowToastDeproperty, value); } } | |
| 25 | 新增: private static void OnIsShowToastChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
| 26 | 新增: { | |
| 27 | 新增: var that = d as DefaultWindow; | |
| 28 | 新增: if (that != null) | |
| 29 | 新增: { | |
| 30 | 新增: if (that.IsShowToast) | |
| 31 | 新增: { | |
| 32 | 新增: that.ShowToast(); | |
| 33 | 新增: } | |
| 34 | 新增: else | |
| 35 | 新增: { | |
| 36 | 新增: that.HideToast(); | |
| 37 | 新增: } | |
| 38 | 新增: } | |
| 39 | 新增: } | |
| 40 | 新增: | |
| 41 | 新增: public static readonly DependencyProperty ToastIconProperty = DependencyProperty.Register("ToastIcon", typeof(Base.IconTypes), typeof(DefaultWindow)); | |
| 42 | 新增: public Base.IconTypes ToastIcon | |
| 43 | 新增: { | |
| 44 | 新增: get | |
| 45 | 新增: { | |
| 46 | 新增: return (Base.IconTypes)GetValue(ToastIconProperty); | |
| 47 | 新增: } | |
| 48 | 新增: set { SetValue(ToastIconProperty, value); } | |
| 49 | 新增: } | |
| 50 | 新增: public static readonly DependencyProperty ToastContentProperty = DependencyProperty.Register("ToastContent", typeof(string), typeof(DefaultWindow)); | |
| 51 | 新增: /// <summary> | |
| 52 | 新增: /// toast content | |
| 53 | 新增: /// </summary> | |
| 54 | 新增: public string ToastContent | |
| 55 | 新增: { | |
| 56 | 新增: get { return (string)GetValue(ToastContentProperty); } | |
| 57 | 新增: set { SetValue(ToastContentProperty, value); } | |
| 58 | 新增: } | |
| 20 | 59 | |
| 21 | 60 | public static readonly DependencyProperty PageContainerProperty = DependencyProperty.Register("PageContainer", typeof(PageContainer), typeof(DefaultWindow), new PropertyMetadata(null, new PropertyChangedCallback(OnPageContainerChanged))); |
| 22 | 61 | public PageContainer PageContainer { get { return (PageContainer)GetValue(PageContainerProperty); } set { SetValue(PageContainerProperty, value); } } |
| @@ -108,11 +147,11 @@ namespace UI.Controls.Window | ||
| 108 | 147 | #endregion |
| 109 | 148 | |
| 110 | 149 | |
| 111 | 删除: public static readonly DependencyProperty IsCanBackProperty = DependencyProperty.Register("IsCanBack", typeof(bool), typeof(DefaultWindow), new PropertyMetadata(false,new PropertyChangedCallback(OnIsCanBackChanged))); | |
| 150 | 新增: public static readonly DependencyProperty IsCanBackProperty = DependencyProperty.Register("IsCanBack", typeof(bool), typeof(DefaultWindow), new PropertyMetadata(false, new PropertyChangedCallback(OnIsCanBackChanged))); | |
| 112 | 151 | |
| 113 | 152 | private static void OnIsCanBackChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) |
| 114 | 153 | { |
| 115 | 删除: var that=d as DefaultWindow; | |
| 154 | 新增: var that = d as DefaultWindow; | |
| 116 | 155 | if (that != null) |
| 117 | 156 | { |
| 118 | 157 | if (that.IsCanBack) |
| @@ -138,6 +177,9 @@ namespace UI.Controls.Window | ||
| 138 | 177 | /// </summary> |
| 139 | 178 | public bool IsWindowClosed { get { return IsWindowClosed_; } } |
| 140 | 179 | |
| 180 | 新增: private Border ToastBorder, Masklayer; | |
| 181 | 新增: private Grid ToastGrid; | |
| 182 | 新增: private DispatcherTimer toastTimer; | |
| 141 | 183 | #region 3.初始化 |
| 142 | 184 | public DefaultWindow() |
| 143 | 185 | { |
| @@ -159,6 +201,14 @@ namespace UI.Controls.Window | ||
| 159 | 201 | } |
| 160 | 202 | |
| 161 | 203 | Loaded += new RoutedEventHandler(window_Loaded); |
| 204 | 新增: | |
| 205 | 新增: toastTimer = new DispatcherTimer(); | |
| 206 | 新增: toastTimer.Tick += (s, e) => | |
| 207 | 新增: { | |
| 208 | 新增: toastTimer.Stop(); | |
| 209 | 新增: IsShowToast = false; | |
| 210 | 新增: }; | |
| 211 | 新增: toastTimer.Interval = new TimeSpan(0, 0, 3); | |
| 162 | 212 | } |
| 163 | 213 | |
| 164 | 214 | private void OnBackCommand(object sender, ExecutedRoutedEventArgs e) |
| @@ -206,6 +256,10 @@ namespace UI.Controls.Window | ||
| 206 | 256 | public override void OnApplyTemplate() |
| 207 | 257 | { |
| 208 | 258 | base.OnApplyTemplate(); |
| 259 | 新增: | |
| 260 | 新增: ToastBorder = GetTemplateChild("ToastBorder") as Border; | |
| 261 | 新增: Masklayer = GetTemplateChild("Masklayer") as Border; | |
| 262 | 新增: ToastGrid = GetTemplateChild("ToastGrid") as Grid; | |
| 209 | 263 | } |
| 210 | 264 | |
| 211 | 265 | |
| @@ -265,6 +319,72 @@ namespace UI.Controls.Window | ||
| 265 | 319 | |
| 266 | 320 | #endregion |
| 267 | 321 | |
| 322 | 新增: private void ShowToast() | |
| 323 | 新增: { | |
| 324 | 新增: ToastGrid.Visibility = Visibility.Visible; | |
| 325 | 新增: | |
| 326 | 新增: Storyboard storyboard = new Storyboard(); | |
| 327 | 新增: | |
| 328 | 新增: DoubleAnimation scrollAnimation = new DoubleAnimation(); | |
| 329 | 新增: scrollAnimation.From = -150; | |
| 330 | 新增: scrollAnimation.To = 0; | |
| 331 | 新增: | |
| 332 | 新增: scrollAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn }; | |
| 333 | 新增: Storyboard.SetTarget(scrollAnimation, ToastBorder); | |
| 334 | 新增: Storyboard.SetTargetProperty(scrollAnimation, new PropertyPath("RenderTransform.Children[0].Y")); | |
| 335 | 新增: scrollAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.35)); | |
| 336 | 新增: | |
| 337 | 新增: DoubleAnimation opacityAnimation = new DoubleAnimation(); | |
| 338 | 新增: opacityAnimation.To = 0.6; | |
| 339 | 新增: opacityAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn }; | |
| 340 | 新增: Storyboard.SetTarget(opacityAnimation, Masklayer); | |
| 341 | 新增: Storyboard.SetTargetProperty(opacityAnimation, new PropertyPath("Opacity")); | |
| 342 | 新增: opacityAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.25)); | |
| 343 | 新增: storyboard.Completed += (e, c) => | |
| 344 | 新增: { | |
| 345 | 新增: toastTimer.Start(); | |
| 346 | 新增: ToastGrid.MouseLeftButtonDown += ToastGrid_MouseLeftButtonDown; | |
| 347 | 新增: }; | |
| 348 | 新增: storyboard.Children.Add(scrollAnimation); | |
| 349 | 新增: storyboard.Children.Add(opacityAnimation); | |
| 350 | 新增: storyboard.Begin(); | |
| 351 | 新增: } | |
| 352 | 新增: | |
| 353 | 新增: private void ToastGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) | |
| 354 | 新增: { | |
| 355 | 新增: toastTimer.Stop(); | |
| 356 | 新增: IsShowToast = false; | |
| 357 | 新增: ToastGrid.MouseLeftButtonDown -= ToastGrid_MouseLeftButtonDown; | |
| 358 | 新增: } | |
| 359 | 新增: | |
| 360 | 新增: private void HideToast() | |
| 361 | 新增: { | |
| 362 | 新增: Storyboard storyboard = new Storyboard(); | |
| 363 | 新增: | |
| 364 | 新增: DoubleAnimation scrollAnimation = new DoubleAnimation(); | |
| 365 | 新增: scrollAnimation.To = -150; | |
| 366 | 新增: | |
| 367 | 新增: scrollAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn }; | |
| 368 | 新增: Storyboard.SetTarget(scrollAnimation, ToastBorder); | |
| 369 | 新增: Storyboard.SetTargetProperty(scrollAnimation, new PropertyPath("RenderTransform.Children[0].Y")); | |
| 370 | 新增: scrollAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.35)); | |
| 371 | 新增: | |
| 372 | 新增: DoubleAnimation opacityAnimation = new DoubleAnimation(); | |
| 373 | 新增: opacityAnimation.To = 0; | |
| 374 | 新增: opacityAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn }; | |
| 375 | 新增: Storyboard.SetTarget(opacityAnimation, Masklayer); | |
| 376 | 新增: Storyboard.SetTargetProperty(opacityAnimation, new PropertyPath("Opacity")); | |
| 377 | 新增: opacityAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.25)); | |
| 378 | 新增: | |
| 379 | 新增: storyboard.Children.Add(scrollAnimation); | |
| 380 | 新增: storyboard.Children.Add(opacityAnimation); | |
| 381 | 新增: storyboard.Completed += (e, c) => | |
| 382 | 新增: { | |
| 383 | 新增: ToastGrid.Visibility = Visibility.Collapsed; | |
| 384 | 新增: }; | |
| 385 | 新增: storyboard.Begin(); | |
| 386 | 新增: } | |
| 387 | 新增: | |
| 268 | 388 | #region 6.事件 |
| 269 | 389 | |
| 270 | 390 | protected override void OnSourceInitialized(EventArgs e) |
| @@ -6,13 +6,16 @@ | ||
| 6 | 6 | xmlns:local="clr-namespace:UI" |
| 7 | 7 | mc:Ignorable="d" |
| 8 | 8 | xmlns:ui="clr-namespace:UI.Controls.Window" |
| 9 | 删除: Title="Tai" Height="585" Width="814" MinHeight="585" MinWidth="814" | |
| 9 | 新增: Title="Tai" Height="585" Width="815" MinHeight="585" MinWidth="814" | |
| 10 | 10 | xmlns:control="clr-namespace:UI.Controls" |
| 11 | 11 | xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" |
| 12 | 12 | xmlns:Navigation="clr-namespace:UI.Controls.Navigation" |
| 13 | 13 | x:Name="Window" |
| 14 | 14 | PageContainer="{Binding PageContainer}" |
| 15 | 删除: Icon="/Resources/Icons/tai32.ico"> | |
| 15 | 新增: Icon="/Resources/Icons/tai32.ico" | |
| 16 | 新增: IsShowToast="{Binding IsShowToast,Mode=TwoWay}" | |
| 17 | 新增: ToastContent="{Binding ToastContent,Mode=TwoWay}" | |
| 18 | 新增: ToastIcon="{Binding ToastIcon}"> | |
| 16 | 19 | <Grid> |
| 17 | 20 | <!--主要功能--> |
| 18 | 21 | <Grid> |
| @@ -5,6 +5,7 @@ using System.Linq; | ||
| 5 | 5 | using System.Text; |
| 6 | 6 | using System.Threading.Tasks; |
| 7 | 7 | using UI.Controls; |
| 8 | 新增:using UI.Controls.Base; | |
| 8 | 9 | using UI.Controls.Navigation.Models; |
| 9 | 10 | |
| 10 | 11 | namespace UI.Models |
| @@ -77,5 +78,14 @@ namespace UI.Models | ||
| 77 | 78 | |
| 78 | 79 | private List<string> IndexUriList_; |
| 79 | 80 | public List<string> IndexUriList { get { return IndexUriList_; } set { IndexUriList_ = value; OnPropertyChanged(); } } |
| 81 | 新增: | |
| 82 | 新增: | |
| 83 | 新增: private string ToastContent_; | |
| 84 | 新增: public string ToastContent { get { return ToastContent_; } set { ToastContent_ = value; OnPropertyChanged(); } } | |
| 85 | 新增: | |
| 86 | 新增: private bool IsShowToast_ = false; | |
| 87 | 新增: public bool IsShowToast { get { return IsShowToast_; } set { IsShowToast_ = value; OnPropertyChanged(); } } | |
| 88 | 新增: private IconTypes ToastIcon_; | |
| 89 | 新增: public IconTypes ToastIcon { get { return ToastIcon_; } set { ToastIcon_ = value; OnPropertyChanged(); } } | |
| 80 | 90 | } |
| 81 | 91 | } |
| @@ -1,6 +1,7 @@ | ||
| 1 | 1 | <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
| 2 | 2 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
| 3 | 删除: xmlns:w="clr-namespace:UI.Controls.Window" xmlns:button="clr-namespace:UI.Controls.Button"> | |
| 3 | 新增: xmlns:w="clr-namespace:UI.Controls.Window" xmlns:button="clr-namespace:UI.Controls.Button" | |
| 4 | 新增: xmlns:base="clr-namespace:UI.Controls.Base"> | |
| 4 | 5 | <Style x:Key="WindowSystemButton" TargetType="{x:Type Button}"> |
| 5 | 6 | <Setter Property="Background" Value="Transparent"/> |
| 6 | 7 | <Setter Property="OverridesDefaultStyle" Value="True"/> |
| @@ -108,7 +109,7 @@ | ||
| 108 | 109 | <StackPanel Orientation="Horizontal" Margin="15,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Center"> |
| 109 | 110 | |
| 110 | 111 | <button:IconButton Width="0" VerticalAlignment="Center" ToolTip="返回" FontSize="10" x:Name="BackBtn" Icon="Back" WindowChrome.IsHitTestVisibleInChrome="True" Command="{x:Static w:DefaultWindowCommands.BackCommand}"/> |
| 111 | 删除: | |
| 112 | 新增: | |
| 112 | 113 | <Image Source="{TemplateBinding Icon}" VerticalAlignment="Center" Stretch="Uniform" Width="18"/> |
| 113 | 114 | <TextBlock VerticalAlignment="Center" Text="{TemplateBinding Title}" IsEnabled="{TemplateBinding IsActive}" Foreground="#5c5c5c" Margin="15,0,0,0"/> |
| 114 | 115 | </StackPanel> |
| @@ -171,7 +172,35 @@ | ||
| 171 | 172 | |
| 172 | 173 | <!--窗体内容--> |
| 173 | 174 | <ContentPresenter Grid.Row="1"/> |
| 175 | 新增: <!--提醒框--> | |
| 176 | 新增: <Grid Panel.ZIndex="999" x:Name="ToastGrid" Visibility="Collapsed"> | |
| 177 | 新增: <!--内容--> | |
| 178 | 新增: <Border | |
| 179 | 新增: Padding="15,15" | |
| 180 | 新增: CornerRadius="6" | |
| 181 | 新增: MaxWidth="320" | |
| 182 | 新增: x:Name="ToastBorder" Background="White" HorizontalAlignment="Center" VerticalAlignment="Top" Panel.ZIndex="1000"> | |
| 183 | 新增: <Border.RenderTransform> | |
| 184 | 新增: <TransformGroup> | |
| 185 | 新增: <TranslateTransform Y="-150"/> | |
| 186 | 新增: </TransformGroup> | |
| 187 | 新增: </Border.RenderTransform> | |
| 188 | 新增: <Border.Effect> | |
| 189 | 新增: <DropShadowEffect BlurRadius="10" Color="Black" Opacity=".5"/> | |
| 190 | 新增: </Border.Effect> | |
| 191 | 新增: <Grid > | |
| 192 | 新增: <Grid.ColumnDefinitions> | |
| 193 | 新增: <ColumnDefinition Width="30"/> | |
| 194 | 新增: <ColumnDefinition Width="*"/> | |
| 174 | 195 | |
| 196 | 新增: </Grid.ColumnDefinitions> | |
| 197 | 新增: <base:Icon IconType="{TemplateBinding ToastIcon}" VerticalAlignment="Top" Margin="0,0,10,0"/> | |
| 198 | 新增: <TextBlock Grid.Column="1" Text="{TemplateBinding ToastContent}" VerticalAlignment="Top" TextWrapping="WrapWithOverflow"/> | |
| 199 | 新增: </Grid> | |
| 200 | 新增: </Border> | |
| 201 | 新增: <!--遮罩层--> | |
| 202 | 新增: <Border x:Name="Masklayer" Background="Black" Opacity="0"></Border> | |
| 203 | 新增: </Grid> | |
| 175 | 204 | </Grid> |
| 176 | 205 | </AdornerDecorator> |
| 177 | 206 | </Border> |
| @@ -190,7 +219,7 @@ | ||
| 190 | 219 | </DoubleAnimation> |
| 191 | 220 | </Storyboard> |
| 192 | 221 | </VisualState> |
| 193 | 删除: | |
| 222 | 新增: | |
| 194 | 223 | </VisualStateGroup> |
| 195 | 224 | </VisualStateManager.VisualStateGroups> |
| 196 | 225 | </Border> |
| @@ -211,7 +240,7 @@ | ||
| 211 | 240 | </Trigger> |
| 212 | 241 | <!--<Trigger Property="IsCanBack" Value="True"> |
| 213 | 242 | <Setter TargetName="BackBtn" Property="Visibility" Value="Visible" /> |
| 214 | 删除: </Trigger>--> | |
| 243 | 新增: </Trigger>--> | |
| 215 | 244 | <!--<Trigger Property="WindowState" Value="Normal"> |
| 216 | 245 | <Setter TargetName="MaximizeButton" Property="Visibility" Value="Visible" /> |
| 217 | 246 | <Setter TargetName="RestoreButton" Property="Visibility" Value="Collapsed" /> |
| @@ -4,6 +4,7 @@ using System.Linq; | ||
| 4 | 4 | using System.Text; |
| 5 | 5 | using System.Threading.Tasks; |
| 6 | 6 | using UI.Controls; |
| 7 | 新增:using UI.Controls.Base; | |
| 7 | 8 | using UI.Controls.Navigation.Models; |
| 8 | 9 | using UI.Models; |
| 9 | 10 | using UI.Views; |
| @@ -91,5 +92,12 @@ namespace UI.ViewModels | ||
| 91 | 92 | }); |
| 92 | 93 | NavSelectedItem = Items[0]; |
| 93 | 94 | } |
| 95 | 新增: | |
| 96 | 新增: public void Toast(string content, IconTypes icon = IconTypes.Accept) | |
| 97 | 新增: { | |
| 98 | 新增: ToastContent = content; | |
| 99 | 新增: ToastIcon = icon; | |
| 100 | 新增: IsShowToast = true; | |
| 101 | 新增: } | |
| 94 | 102 | } |
| 95 | 103 | } |

