wpf: расширенное время выполнения текстового поля под строкой, а не Woking при возврате из базы данных - PullRequest
0 голосов
/ 27 июня 2011

Я использую WPF RichTextBox.Я делаю время выполнения форматирования, например, сделать под строкой.Нормально работает нормально.Но после перезагрузки из базы данных он не работает должным образом.Это пример кода, который я использую.

var selection = TxtRtf1.Selection;
if (!selection.IsEmpty)
{
   var tdc =(TextDecorationCollection) selection.GetPropertyValue(Inline.TextDecorationsProperty);
   if (tdc == null || !tdc.Equals(TextDecorations.Underline))
      selection.ApplyPropertyValue(Run.TextDecorationsProperty, TextDecorations.Underline);
   else
      selection.ApplyPropertyValue(Inline.TextDecorationsProperty, null);
}

Фактически, что происходит <<strong> tdc.Equals (TextDecorations.Underline) > return всегда false;после чтения данных из базы данных.

Ответы [ 2 ]

0 голосов
/ 25 января 2016

Решение, предоставленное здесь , похоже, работает для меня.Я немного изменил его.Конечно, вам все равно придется использовать привязку данных или какой-либо другой метод для отображения булевой информации пользователю.

private bool RTEHasUnderlinedText()
    {
        var sel = richTextBox.Selection;
        var value = GetPropertyValue(sel, Paragraph.TextDecorationsProperty);
        return ((TextDecorationCollection)(value)).Count > 0;
    }

    private Object GetPropertyValue(TextRange textRange, DependencyProperty formattingProperty)
    {
        Object value = null;
        var pointer = textRange.Start;
        if (pointer is TextPointer)
        {
            Boolean needsContinue = true;
            DependencyObject element = ((TextPointer)pointer).Parent as TextElement;
            while (needsContinue && (element is Inline || element is Paragraph || element is TextBlock))
            {
                value = element.GetValue(formattingProperty);
                IEnumerable seq = value as IEnumerable;
                needsContinue = (seq == null) ? value == null : seq.Cast<Object>().Count() == 0;
                element = element is TextElement ? ((TextElement)element).Parent : null;
            }
        }
        return value;
    }
0 голосов
/ 27 июня 2011

Попробуйте tdc.SequenceEqual(TextDecorations.Underline).

 var tdc =(TextDecorationCollection) selection.GetPropertyValue(Inline.TextDecorationsProperty);
 if (tdc == null || !tdc.SequenceEqual(TextDecorations.Underline))
    selection.ApplyPropertyValue(Run.TextDecorationsProperty, TextDecorations.Underline);
 else
    selection.ApplyPropertyValue(Inline.TextDecorationsProperty, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...