(鼠标放上去将一直显示,移开动画继续),提供normal和error两种边框。
介绍:传统的确定,取消,OK,CANCAL之类的对话框太繁琐了,由于项目需要而诞生的仿手机式提示对话框。当然传统的对话框项目中也有,这里就不做介绍了。
出场和退场动画做得很简单,就用Blend随便鼓捣了一番,将就用吧。
预览效果如下:
思路其实很简单:将窗体透明化->布局和样式设计->后台传值调用。
准备工作:Microsoft.Expression.Interactions.dll和System.Windows.Interactivity.dll的引用。Blend中大多数行为需要需要这2个dll,必备啊!
1,将窗体透明化,无边框化:(在.net 4.5中 拖动和缩放窗体再也不用自己写代码了,集成的 <WindowChrome/>就可以实现拖动缩放窗体等诸多功能。)
关键设置如下:
AllowsTransparency=\"True\" HorizontalAlignment=\"Center\" Background=\"Transparent\" xmlns:i=\"http://schemas.microsoft.com/expression/2010/interactivity\" xmlns:ei=\"http://schemas.microsoft.com/expression/2010/interactions\" WindowStyle=\"None\"
2,布局,主要包括初始布局和动画过渡2个方面:
静态界面布局:
<Grid HorizontalAlignment=\"Center\" VerticalAlignment=\"Top\" x:Name=\"back\"> <Border Padding=\"38 0\" x:Name=\"br\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"> <i:Interaction.Triggers> <i:EventTrigger EventName=\"MouseEnter\"> <ei:ControlStoryboardAction Storyboard=\"{StaticResource ShowSb}\" ControlStoryboardOption=\"Stop\"/> </i:EventTrigger> <i:EventTrigger EventName=\"MouseLeave\"> <ei:ControlStoryboardAction Storyboard=\"{StaticResource MouseLeave}\"/> </i:EventTrigger> </i:Interaction.Triggers> <Grid HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"> <Grid HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"> <Grid.RowDefinitions> <RowDefinition Height=\"12\"></RowDefinition> <RowDefinition Height=\"auto\"></RowDefinition> <RowDefinition Height=\"12\"></RowDefinition> </Grid.RowDefinitions> <Border Visibility=\"Visible\" x:Name=\"grid1\" Grid.RowSpan=\"3\" RenderTransformOrigin=\"0.5,0.5\" BorderBrush=\"#00A0E9\" BorderThickness=\"1\" CornerRadius=\"8\"> <Border.RenderTransform> <TransformGroup> <ScaleTransform/> <SkewTransform/> <RotateTransform/> <TranslateTransform/> </TransformGroup> </Border.RenderTransform> <Border.Background> <LinearGradientBrush EndPoint=\"1,1\" MappingMode=\"RelativeToBoundingBox\" StartPoint=\"0,0\"> <GradientStop Color=\"#EFF0F2\" Offset=\"0.75\"/> <GradientStop Color=\"#EFF0F2\" Offset=\"0.25\"/> <GradientStop Color=\"#EFF0F2\" Offset=\"1\"/> <GradientStop Color=\"#EFF0F2\"/> </LinearGradientBrush> </Border.Background> </Border> <Border x:Name=\"grid2\" Visibility=\"Visible\" Opacity=\"1\" Grid.RowSpan=\"3\" RenderTransformOrigin=\"0.5,0.5\" BorderBrush=\"#F35150\" BorderThickness=\"1\" CornerRadius=\"8\"> <Border.RenderTransform> <TransformGroup> <ScaleTransform/> <SkewTransform/> <RotateTransform/> <TranslateTransform/> </TransformGroup> </Border.RenderTransform> <Border.Background> <LinearGradientBrush EndPoint=\"1,1\" MappingMode=\"RelativeToBoundingBox\" StartPoint=\"0,0\"> <GradientStop Color=\"#EFF0F2\" Offset=\"0.75\"/> <GradientStop Color=\"#EFF0F2\" Offset=\"0.25\"/> <GradientStop Color=\"#EFF0F2\" Offset=\"1\"/> <GradientStop Color=\"#EFF0F2\"/> </LinearGradientBrush> </Border.Background> </Border> <TextBlock Margin=\"38 0 38 0\" Grid.Row=\"1\" FontSize=\"16\" Foreground=\"#64676d\" x:Name=\"tb\" Text=\"{Binding Message,RelativeSource={RelativeSource AncestorType=Window},FallbackValue=失败信息}\" TextWrapping=\"Wrap\" MinWidth=\"200\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" RenderTransformOrigin=\"0.5,0.5\" MaxWidth=\"600\" TextAlignment=\"Center\" FontFamily=\"Microsoft YaHei\"> <TextBlock.RenderTransform> <TransformGroup> <ScaleTransform/> <SkewTransform/> <RotateTransform/> <TranslateTransform/> </TransformGroup> </TextBlock.RenderTransform></TextBlock> </Grid> </Grid> </Border> </Grid>
进入和退出的动画控制:
<Storyboard x:Key=\"ShowSb\" Completed=\"Storyboard_Completed\"> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)\" Storyboard.TargetName=\"grid1\"> <EasingDoubleKeyFrame KeyTime=\"0\" Value=\"{Binding YOffSet}\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"0\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:3\" Value=\"0\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:3.5\" Value=\"{Binding YOffSet}\"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)\" Storyboard.TargetName=\"grid2\"> <EasingDoubleKeyFrame KeyTime=\"0\" Value=\"{Binding YOffSet}\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"0\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:3\" Value=\"0\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:3.5\" Value=\"{Binding YOffSet}\"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)\" Storyboard.TargetName=\"tb\"> <EasingDoubleKeyFrame KeyTime=\"0\" Value=\"{Binding YOffSet}\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"0\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:3\" Value=\"0\"/> <EasingDoubleKeyFrame KeyTime=\"0:0:3.5\" Value=\"{Binding YOffSet}\"/> </DoubleAnimationUsingKeyFrames> </Storyboard> <Storyboard x:Key=\"MouseLeave\" Completed=\"Storyboard_Completed\"> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.Opacity)\" Storyboard.TargetName=\"grid1\"> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"0\"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.Opacity)\" Storyboard.TargetName=\"grid2\"> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"0\"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.Opacity)\" Storyboard.TargetName=\"tb\"> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"0\"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)\" Storyboard.TargetName=\"grid1\"> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"{Binding YOffSet}\"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)\" Storyboard.TargetName=\"grid2\"> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"{Binding YOffSet}\"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)\" Storyboard.TargetName=\"tb\"> <EasingDoubleKeyFrame KeyTime=\"0:0:0.5\" Value=\"{Binding YOffSet}\"/> </DoubleAnimationUsingKeyFrames> </Storyboard>
注意:鼠标移动上去停止动画和移出后快速消失的代码为:
<i:Interaction.Triggers> <i:EventTrigger EventName=\"MouseEnter\"> <ei:ControlStoryboardAction Storyboard=\"{StaticResource ShowSb}\" ControlStoryboardOption=\"Stop\"/> </i:EventTrigger> <i:EventTrigger EventName=\"MouseLeave\"> <ei:ControlStoryboardAction Storyboard=\"{StaticResource MouseLeave}\"/> </i:EventTrigger> </i:Interaction.Triggers>
后台代码逻辑:
private bool iserror = false; public void Show(string messageBoxText, bool iserror = false) { this.iserror = iserror; this.Message = messageBoxText; this.Show(); } public OnlyShowMessageBox() { InitializeComponent(); this.DataContext = new model() { YOffSet = -300d }; this.Loaded += (y, k) => { this.Top = 41; this.Left = (SystemParameters.WorkArea.Width) / 2 - this.ActualWidth / 2; if (iserror) { this.grid.Visibility = Visibility.Collapsed; } else { this.grid.Visibility = Visibility.Collapsed; } (this.Resources[\"ShowSb\"] as Storyboard).Begin(); }; } private void Storyboard_Completed(object sender, EventArgs e) { this.Close(); }
其中 :
public class model : ModelBase { private double YOffset; public double YOffSet { get { return YOffset; } set { YOffset = value; RaisePropertyChangedEvent(\"YOffSet\"); } } }
其中ModelBase在 可分组的选择框控件(MVVM下)(Toggle样式 仿造单选框RadioButton,复选框CheckBox功能) 中有介绍。
最后,调用方法:
new OnlyShowMessageBox().Show(\"请注意:前方高能,禁止入内!\", false);
或者
new OnlyShowMessageBox().Show(\"不存在此对象!\", true);
以上所述是小编给大家介绍的WPF自动隐藏的消息框的全部叙述,希望对大家有所帮助,如果大家想了解更多内容敬请关注phpstudy!
本文地址:https://www.stayed.cn/item/6377
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我