關於WPF中Popup控件的小記


在wpf開發中,常需要在鼠標位置處彈出一個“提示框”(在此就以“提示框”代替吧),通過“提示框”進行信息提示或者數據操作,如果僅僅是提示作用,使用ToolTip控件已經足夠,但是有些是需要在彈出的框中有操作數據的功能,如彈出框包含一棵樹或者列表,此時ToolTip就沒法實現了,因為ToolTip只能起到顯示的作用,也許有人會有彈出對話框的形式,這是一種辦法,但是要讓對話框總是顯示在鼠標的位置,並且對話框的大小需要根據顯示內容的改變(如樹或列表的展開與收縮)而動態改變的話,實現起來會比較麻煩。通過進一步的探討,原來使用Popup控件是那么的簡單和實用,它在許多方面和ToolTip 控件一樣,也是單一內容,但是它可以包含任何WPF元素,該內容存儲在Popup.Child屬性中,而不像ToolTip控件存儲在ToolTip.Content屬性中。另外,和ToolTip控件一樣Popup控件也可以延伸出窗口的邊界,可以使用IsOpen屬性顯示或隱藏Popup控件。跟ToolTip相比,Popup會有以下幾個比較重要的特點:

(1)ToolTip可以自動顯示,而Popup控件永遠不會自動顯示,為了顯示Popup控件必須設置IsOpen屬性。

(2)ToolTip可以自動消失,但是Popup有點不同的就是,在默認情況下,Popup.StaysOen屬性被設置為True,並且Popup控件會一直顯示,直到顯式地將IsOpen屬性設置為False。如果將Popup.StaysOpen屬性設置為False,當用戶在其他地方單擊鼠標時,Popup控件就會消失。

(3)如果Popup控件的IsOpen屬性設置為True時,可以通過Popup控件的PopupAnimation屬性設置彈出方式,Placement屬性設置彈出位置,如Placement="Mouse",表示在鼠標位置處彈出“提示框”

(4)Popup控件不和任何控件相關聯,無論在哪定義Popup標簽都可以。

部分XAML代碼:

  <TextBox Name="my_text" Grid.Row="0" Grid.Column="3" Height="25" Width="140" IsReadOnly="True" HorizontalAlignment="Left" Margin="4,0,0,0" />
      <Button Grid.Row="0" Grid.Column="3" Width="20" Height="25" Content="..." HorizontalAlignment="Right" Margin="0,0,10,0"  Click="Button_Click" />
            
       <Popup Name="popup" AllowsTransparency="True" FlowDirection="LeftToRight"
               PopupAnimation="Fade" Placement="Mouse" StaysOpen="False">
                <Border Background="Transparent">
                    <!--定義邊框-->
                    <StackPanel>

        <!--local:ControlCheckPointTree為自定義控件樹-->
                        <local:ControlCheckPointTree x:Name="myTree" IsShowCheck="True" onSelectedItemChanged="ControlCheckPointTree_onSelectedItemChanged" MouseLeave="ControlCheckPointTree_MouseLeave"/>
                    </StackPanel>
                </Border>
         </Popup>

后台代碼:

   private void Button_Click(object sender, RoutedEventArgs e)        

  {            

    popup.IsOpen = true;        

  }

       private void ControlCheckPointTree_onSelectedItemChanged(object sender, EventArgs e)        

  {            

     my_text.Text = "";            

    foreach (string str in myTree.SelectedItemNames)            

     {                

       my_text.Text += str;            

     }        

   }

        private void ControlCheckPointTree_MouseLeave(object sender, MouseEventArgs e)        

   {            

      popup.IsOpen = false;        

   }


免責聲明!

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



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