删除 WPF 中动态超链接的下划线
Remove underline of dynamic hyperlink in WPF
我创建了 WPF 应用程序。在某种形式下,用户将 richtextbox 的选定文本更改为 hyperlink。我搜索了一个多小时并寻找解决方案。但是不能。
我的动态超链接创建如下:
var textRange = RichTextBox.Selection;
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue);
var hyperlink = new Hyperlink(textRange.Start, textRange.End)
{
IsEnabled = true,
Foreground = Brushes.Blue
};
hyperlink.NavigateUri = new Uri("http://search.msn.com/" + firstOrDefault.WordId);
var main = new WordMain();
hyperlink.Click += new RoutedEventHandler(main.hyperLink_Click);
RichTextBox.IsDocumentEnabled = true;
RichTextBox.IsReadOnly = false;
如何去除动态超链接的下划线。我想用textdecoration,代码不行
我刚刚试过了,效果很好
Xaml
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="Root">
<TextBlock x:Name="TextBl"></TextBlock>
</Grid>
</Window>
代码隐藏
Run run = new Run("Whosebug");
Hyperlink hyper = new Hyperlink(run);
hyper.NavigateUri = new Uri("http://whosebug.com");
hyper.TextDecorations = null;
TextBl.Inlines.Add(hyper);
从您的 C#
代码中删除颜色格式并将其放入您的 App.xaml
文件中:
<Application.Resources>
...
<TextDecorationCollection x:Key="_textDeco_hyperlink">
<!--<TextDecoration Location="Underline" />-->
</TextDecorationCollection>
<Style TargetType="{x:Type Hyperlink}">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Background" Value="Khaki" />
<Setter Property="ForceCursor" Value="True" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="TextDecorations" Value="{DynamicResource _textDeco_hyperlink}" />
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Khaki" />
<Setter Property="Background" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
...
<Application.Resources>
如果这不起作用,我认为这是序列化和反序列化 FlowDocument
的方式。
试试这个:
// Store your FlowDocument as a list of strings
List<string> blocksAsStrings = FlowDoc_store(_docSelected._Rtb.Document);
...
// Load your FlowDocument into your RichTextBox
rtb.Document = FlowDoc_load(blocksAsStrings);
/// <summary>
/// Stores a FlowDocument as a list of strings, each string represents a Block.
/// </summary>
public static List<string> FlowDoc_store(FlowDocument flowDoc)
{
List<string> blocksAsStrings = new List<string>(flowDoc.Blocks.Count);
foreach (Block block in flowDoc.Blocks)
{
blocksAsStrings.Add(XamlWriter.Save(block));
}
return blocksAsStrings;
}
/// <summary>
/// Loads a FlowDocument from a list of strings, each string represents a Block.
/// </summary>
public static FlowDocument FlowDoc_load(List<string> blocksAsStrings)
{
FlowDocument flowDoc = new FlowDocument();
foreach (string blockAsString in blocksAsStrings)
{
using (StringReader stringReader = new StringReader(blockAsString))
{
using (XmlReader xmlReader = XmlReader.Create(stringReader))
{
Block block = (Block)XamlReader.Load(xmlReader);
flowDoc.Blocks.Add(block);
}
}
}
return flowDoc;
}
对于从搜索结果来到这里寻找简单答案并且不在乎保留任何装饰(例如使用图像时)的任何人:
<Hyperlink ... TextDecorations="">
...
</Hyperlink>
我创建了 WPF 应用程序。在某种形式下,用户将 richtextbox 的选定文本更改为 hyperlink。我搜索了一个多小时并寻找解决方案。但是不能。 我的动态超链接创建如下:
var textRange = RichTextBox.Selection;
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue);
var hyperlink = new Hyperlink(textRange.Start, textRange.End)
{
IsEnabled = true,
Foreground = Brushes.Blue
};
hyperlink.NavigateUri = new Uri("http://search.msn.com/" + firstOrDefault.WordId);
var main = new WordMain();
hyperlink.Click += new RoutedEventHandler(main.hyperLink_Click);
RichTextBox.IsDocumentEnabled = true;
RichTextBox.IsReadOnly = false;
如何去除动态超链接的下划线。我想用textdecoration,代码不行
我刚刚试过了,效果很好
Xaml
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="Root">
<TextBlock x:Name="TextBl"></TextBlock>
</Grid>
</Window>
代码隐藏
Run run = new Run("Whosebug");
Hyperlink hyper = new Hyperlink(run);
hyper.NavigateUri = new Uri("http://whosebug.com");
hyper.TextDecorations = null;
TextBl.Inlines.Add(hyper);
从您的 C#
代码中删除颜色格式并将其放入您的 App.xaml
文件中:
<Application.Resources>
...
<TextDecorationCollection x:Key="_textDeco_hyperlink">
<!--<TextDecoration Location="Underline" />-->
</TextDecorationCollection>
<Style TargetType="{x:Type Hyperlink}">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Background" Value="Khaki" />
<Setter Property="ForceCursor" Value="True" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="TextDecorations" Value="{DynamicResource _textDeco_hyperlink}" />
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Khaki" />
<Setter Property="Background" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
...
<Application.Resources>
如果这不起作用,我认为这是序列化和反序列化 FlowDocument
的方式。
试试这个:
// Store your FlowDocument as a list of strings
List<string> blocksAsStrings = FlowDoc_store(_docSelected._Rtb.Document);
...
// Load your FlowDocument into your RichTextBox
rtb.Document = FlowDoc_load(blocksAsStrings);
/// <summary>
/// Stores a FlowDocument as a list of strings, each string represents a Block.
/// </summary>
public static List<string> FlowDoc_store(FlowDocument flowDoc)
{
List<string> blocksAsStrings = new List<string>(flowDoc.Blocks.Count);
foreach (Block block in flowDoc.Blocks)
{
blocksAsStrings.Add(XamlWriter.Save(block));
}
return blocksAsStrings;
}
/// <summary>
/// Loads a FlowDocument from a list of strings, each string represents a Block.
/// </summary>
public static FlowDocument FlowDoc_load(List<string> blocksAsStrings)
{
FlowDocument flowDoc = new FlowDocument();
foreach (string blockAsString in blocksAsStrings)
{
using (StringReader stringReader = new StringReader(blockAsString))
{
using (XmlReader xmlReader = XmlReader.Create(stringReader))
{
Block block = (Block)XamlReader.Load(xmlReader);
flowDoc.Blocks.Add(block);
}
}
}
return flowDoc;
}
对于从搜索结果来到这里寻找简单答案并且不在乎保留任何装饰(例如使用图像时)的任何人:
<Hyperlink ... TextDecorations="">
...
</Hyperlink>