1. 程式人生 > >WPF-建立超連結文字

WPF-建立超連結文字

在WPF中建立超連結文字,同樣有兩種方式,一種是在XAML檔案中,使用標記語言建立,這是最簡單也是最常用的建立方式;另外一種是使用程式碼建立,這種方式比較少見,而且比較複雜,但是對於需要動態建立或者需要根據不同的條件顯示不同的超連結文字的情況下,是必須的。

下邊就主要講一下這兩種建立方式

1.使用標記語言建立(XAML)

<TextBlock >
    <Hyperlink FontSize="20" MouseEnter="Hyperlink_MouseEnter"
 		Foreground="#FF20D18D" MouseLeave="Hyperlink_MouseLeave" Click="Hyperlink_Click">
                               <Textblock Text = "this is a hyperlink"></Textblock>
    </Hyperlink>
</TextBlock>

預設情況下,滑鼠未選中超連結文字時,文字顏色為藍色,滑鼠選中時,文字顏色為紅色,可以通過觸發MouseLeave和MouseEnter事件,通過修改Foreground的顏色來進行自定義

本文修改了超連結文字無法動態繫結的問題,超連結文字一般是要求顯示寫出,但是很多情況超連結文字可能需要上下文的內容決定,或者繫結一個物件的屬性等,這時候可以將超連結文字儲存至一個textblock標籤中,通過繫結textblock就可以實現動態改變超連結的文字值。

2.使用程式碼實現

        private void addHyperLinkLineHeader(string lineName)
        {
            TextBlock LineName = new TextBlock();//定義textblock標籤
            LineName.Margin = new System.Windows.Thickness(100, 50, 0, 0);
            LineName.Foreground = System.Windows.Media.Brushes.White;
            LineName.FontSize = 14;
            Run run1 = new Run(lineName);//定義流元素
            Hyperlink link = new Hyperlink();//定義超連結文字標籤
            link.Foreground = System.Windows.Media.Brushes.White;//設定超連結文字的字型顏色
            link.Inlines.Add(run1);//將流元素新增到超連結文字中
            LineName.Inlines.Add(link);//將超連結文字新增到流元素中
            link.MouseEnter += new MouseEventHandler(link_MouseEnter);//為超連結文字新增滑鼠進入觸發事件
            link.MouseLeave += new MouseEventHandler(link_MouseLeave);//為超連結文字新增滑鼠離開觸發時間
            link.Click += new RoutedEventHandler(link_Click);//為超連結文字新增滑鼠單擊事件
            linesStackP.Children.Add(LineName);
        }

對應的MouseEnter與MouseLeave事件處理程式,以及單擊事件:

        private void link_MouseEnter(object sender, MouseEventArgs e)
        {
            Hyperlink link = (Hyperlink)e.OriginalSource;
            link.Foreground = System.Windows.Media.Brushes.Red;
        }
        private void link_MouseLeave(object sender, MouseEventArgs e)
        {
            Hyperlink link = (Hyperlink)e.OriginalSource;
            link.Foreground = System.Windows.Media.Brushes.White;
        }
        private void link_Click(object sender, RoutedEventArgs e)
        {

            Hyperlink link = (Hyperlink)e.OriginalSource;
            InlineCollection ilineName = link.Inlines;
            Run line = (Run)ilineName.FirstInline;
            string str = line.Text;
        }
有關流檔案,參考<a target=_blank href="https://technet.microsoft.com/zh-cn/office/aa970909.aspx">https://technet.microsoft.com/zh-cn/office/aa970909.aspx</a>