我正在使用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>
我做错了什么?文本是可选的,只有我无法点击它来执行我的命令。
答案 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);
希望有人使用这个:)。我做了:))