WPF自動隱藏的消息框的實例代碼
(鼠標放上去將一直顯示,移開動畫繼續(xù)),提供normal和error兩種邊框。
介紹:傳統(tǒng)的確定,取消,OK,CANCAL之類的對話框太繁瑣了,由于項目需要而誕生的仿手機式提示對話框。當然傳統(tǒng)的對話框項目中也有,這里就不做介紹了。
出場和退場動畫做得很簡單,就用Blend隨便鼓搗了一番,將就用吧。
預覽效果如下:
思路其實很簡單:將窗體透明化->布局和樣式設計->后臺傳值調(diào)用。
準備工作:Microsoft.Expression.Interactions.dll和System.Windows.Interactivity.dll的引用。Blend中大多數(shù)行為需要需要這2個dll,必備啊!
1,將窗體透明化,無邊框化:(在.net 4.5中 拖動和縮放窗體再也不用自己寫代碼了,集成的 <WindowChrome/>就可以實現(xiàn)拖動縮放窗體等諸多功能。)
關鍵設置如下:
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個方面:
靜態(tài)界面布局:
<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功能) 中有介紹。
最后,調(diào)用方法:
new OnlyShowMessageBox().Show("請注意:前方高能,禁止入內(nèi)!", false);
或者
new OnlyShowMessageBox().Show("不存在此對象!", true);
以上所述是小編給大家介紹的WPF自動隱藏的消息框的全部敘述,希望對大家有所幫助,如果大家想了解更多內(nèi)容敬請關注腳本之家!
相關文章
C#調(diào)用百度API實現(xiàn)活體檢測的方法
這篇文章主要給大家介紹了關于C#調(diào)用百度API實現(xiàn)活體檢測的方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09c# 編寫一個輕量級的異步寫日志的實用工具類(LogAsyncWriter)
這篇文章主要介紹了c# 如何編寫一個輕量級的異步寫日志的實用工具類(LogAsyncWriter),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下2021-03-03C#實現(xiàn)獲取文本文件的編碼的一個類(區(qū)分GB2312和UTF8)
這篇文章主要介紹了C#實現(xiàn)獲取文本文件的編碼一個類,本文給出類可以自動區(qū)分GB2312和UTF8,并同時給出了使用方法,需要的朋友可以參考下2014-09-09