Удалить подчеркивание динамической гиперссылки в WPF

Я создаю приложение WPF. В какой-то форме пользователь изменяет выделенный текст richtextbox на гиперссылку. Я ищу больше часа и ищу решение. Но не могу. Моя динамическая гиперссылка создается следующим образом:

                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, но не могу сделать это с помощью кодов.


person Elvin Mammadov    schedule 23.01.2016    source источник
comment
Извините, но я кое-что не понял: нужно ли сохранять какой-либо другой TextDecoration? Или можно просто удалить их все?   -  person appa yip yip    schedule 23.01.2016
comment
@Эльвин Мамедов: Должны ли все гиперссылки в вашем приложении иметь одинаковый формат?   -  person Pollitzer    schedule 24.01.2016
comment
да. Я добавляю эту гиперссылку в базу данных, при этом коды @lyz работают, когда я добавляю текст в RichTextBox. но после извлечения из базы данных гиперссылка снова подчеркивается   -  person Elvin Mammadov    schedule 24.01.2016


Ответы (3)


Для тех, кто приходит сюда из результатов поиска, ищет простой ответ и не заботится о сохранении каких-либо украшений (например, при использовании изображения):

<Hyperlink ... TextDecorations="">
   ...
</Hyperlink>
person Chris    schedule 28.03.2017

Удалите цветовое форматирование из кода 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;
}
person Pollitzer    schedule 25.01.2016

person    schedule
comment
но когда я загружаю его из базы данных, снова появляется подчеркивание - person Elvin Mammadov; 23.01.2016
comment
Каков ваш textRange и к какому элементу вы добавляете гиперссылку? если вы можете показать больше кода - person lyz; 23.01.2016
comment
И к какому элементу вы добавляете гиперссылку, пожалуйста? Я не вижу этого в коде, который вы обновили - person lyz; 23.01.2016
comment
другого элемента нет. - person Elvin Mammadov; 23.01.2016