WPF Popup 右下角提示框 定時消失 ,以及任意位置定位


------------恢復內容開始------------

好久沒寫WPF的博客了,其實有很多心得要總結下,但是懶。。。。。

今天工作需要,需要實現一個       

1 右下角的提示窗口,然后過三五秒自動消失這樣的需求。

2 再任意位置可以彈出 一個小界面,比如點擊確認按鈕后彈出某些確認信息 (用窗口實現當然也可以,感覺有點大馬拉小車)

 

想着這樣的功能應該又好人做過了,直接網上抄下就可以了,奈何沒找到,CSDN下載都需要積分。哎,現在的人都想着賺錢了嘛。。。。

 

決定用Popup做,回顧了下Popup的玩法,要實現,右下角/任意坐標,還是有點麻煩的。一些基礎如果不是很清楚可以看下這個博客

https://www.cnblogs.com/nimorl/p/11628596.html ,寫的比較清楚

 

想實現任意位置,需要用到PlacementRectangle 屬性,這個東西 簡單點說就是需要你告訴POPUP 一個坐標,然后它根據坐標來做相對定位,我覺得太麻煩了,我這么懶的人是不會去計算坐標的

所以我想了個簡單的方法。既然popup需要一個宿主,那么我們可以在界面的任意位置放置這個宿主,只不過不顯示宿主。這樣,POPUP的位置也可以說是任意了。

比如左下角。假設我們Window下面是一個Grid.那么我只要把宿主放到右下角,然后讓POPUP 靠左顯示就可以了

1     <Grid >
2         <Button x:Name="pophost" Height="100" Width="1"   HorizontalAlignment="Right" Margin="0,0,0,0" VerticalAlignment="Bottom" > </Button>
3         <Popup IsOpen="True" StaysOpen="True" PlacementTarget ="{Binding ElementName=pophost}" Placement="Left" >
4             <TextBlock Background="AliceBlue" Height="100" Width="200">我是popup里的txtblock</TextBlock>
5         </Popup>
6     </Grid>

 

 那么,我要多放一個額外的宿主是不是很麻煩那?是的,所以我們改進下代碼,定義一個UserCrontrol,  名字就叫myPopup吧   里面放一個Popup,這樣,你用的時候直接用myPopup就行了

 1 <UserControl x:Class="CsharpWpfManual.myPopup"
 2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 6              xmlns:local="clr-namespace:CsharpWpfManual"
 7              mc:Ignorable="d"  x:Name="popuphost"
 8              Width="0.1" Height="100" >
 9     <Popup x:Name="pp" PlacementTarget="{Binding ElementName=popuphost}" IsOpen="False"  StaysOpen="True" Placement="Left" Opened="pp_Opened">
10         <TextBox x:Name="txt" Width="300" Height="100">你好,我來了</TextBox>
11     </Popup>
12 </UserControl>

 

這樣我用的時候,代碼就變成了這樣

1     <Grid >    
3         <local:myPopup Background="Red" x:Name="mypp"   Width="0" Height="100"  HorizontalAlignment="Right"  VerticalAlignment="Bottom" Margin="0,0,0,0"/>
4     </Grid>

 

 

下面我們寫一下myPopup 的cs代碼。實現一些定時和顯示消息的功能

 1 public partial class myPopup : UserControl
 2     {
 3         public myPopup()
 4         {
 5             InitializeComponent();
 6             readDataTimer.Tick += new EventHandler(timeCycle);
 7             readDataTimer.Interval = new TimeSpan(0, 0, 0, 5);
 8         }
 9 
10         private static System.Windows.Threading.DispatcherTimer readDataTimer = new System.Windows.Threading.DispatcherTimer();
11         public void timeCycle(object sender, EventArgs e)
12         {
13             if (pp.IsOpen == true)
14             {
15                 pp.IsOpen = false;
16             }
17             readDataTimer.IsEnabled = false;
18 
19         }
20         /// <summary>
21         /// opend事件,打開后,啟動定時器開始計時,先寫死5秒把
22         /// </summary>
23         private void pp_Opened(object sender, EventArgs e)
24         {
25             readDataTimer.IsEnabled = true;
26 
27             readDataTimer.Start();
28         }
29 
30 
31         public void ShowMessage(string message)
32         {
33             pp.IsOpen = true;
34             txt.Text = message;
35         }
36     }

 

至此,相信聰明的小伙伴們已經想到了如何把 提示框放在界面中央了, 也可以擴展一下在mypopup類中做個Content屬性,這樣就可以方式任何東西啦,我懶的做了,誰做好了記得分享啊

我也不多說了,上個源碼給大伙看把

 

 https://files.cnblogs.com/files/CSSZBB/WpfApp7.rar

-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM