超链接单击操作以及选择和复制文本的功能

时间:2015-11-23 09:56:09

标签: c# wpf xaml hyperlink textbox

我正在使用WPF中的C#应用程序并且需要用户能够单击超链接(执行命令),但也能够选择文本并将其复制。

我搜索了选项,但找不到任何可以帮助我的东西。

目前我的WPF XAML中有以下内容:

    <TextBlock Grid.Column="1" Grid.Row="0">
       <Hyperlink Command="{Binding OpenDefaultMailApplicationCommand}" >
       <TextBox Height="20" IsReadOnly="True" Foreground="Blue"         BorderThickness="0">test@test.nl</TextBox>
   </Hyperlink>
    </TextBlock>

我做错了什么?文本是可选的,只有我无法点击它来执行我的命令。

2 个答案:

答案 0 :(得分:0)

这是我用于类似的要求。

您需要一个不可编辑且可点击的文本框。您可以通过下划线和颜色更改等方式将其设置为超链接。

<TextBox IsReadOnly="True"
                 Background="Transparent"
                 BorderThickness="0"
                 Text="test@test.nl"
                 Height="20"
                 PreviewMouseLeftButtonDown="TextBox_PreviewMouseLeftButtonDown"
                 TextDecorations="Underline"
                 MouseMove="TextBox_MouseMove"
                 Foreground="Blue" />


private void TextBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
        if (Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            MessageBox.Show("CLicked");
        }
}


private void TextBox_MouseMove(object sender, MouseEventArgs e)
{
        var txtBox = sender as TextBox;
        if (Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            txtBox.Cursor = Cursors.Hand;
        }
        else
            txtBox .Cursor = null;
}

答案 1 :(得分:0)

所以我找到了解决问题的另一种方法。

通过使用richtextbox并为其添加超链接,用户可以选择文本,但也可以单击它。

           <RichTextBox Name="rtbEmail" Grid.Column="1" Grid.Row="0" Foreground="Blue" BorderThickness="0" 
                                     Margin="3"/>

在'C#'usercontrol.cs中,我以编程方式设置超链接并向其添加一个click事件处理程序。

                FlowDocument doc = new FlowDocument();
            rtbEmail.Document = doc;
            rtbEmail.IsReadOnly = true;
            rtbEmail.IsDocumentEnabled = true;

            Paragraph para = new Paragraph();
            doc.Blocks.Add(para);

            Hyperlink link = new Hyperlink();
            link.IsEnabled = true;
            link.Inlines.Add(DataContext.EmailAddress);

            link.Click += new RoutedEventHandler(this.OpenEmailAppEvent);
            para.Inlines.Add(link);

希望有人使用这个:)。我做了:))