Я хочу добавить декоративную кнопку TextDecorations.Strikethrough
к своему пользовательскому RichTextBox
. Я использую приведенный ниже код для добавления и удаления TextDecoration
. Дело в том, что я получаю InvalidCastException: Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.Windows.TextDecorationCollection'.
, когда выбираю диапазон, больший, чем тот, который зачеркнут, и нажимаю " кнопку «Перечеркнуть».
Мой код
private void StrikeOutButton_Click(object sender, RoutedEventArgs e)
{
TextRange range = new TextRange(this.MyRichTextBox.Selection.Start,
this.MyRichTextBox.Selection.End);
TextDecorationCollection tdc =
(TextDecorationCollection)this.MyRichTextBox.
Selection.GetPropertyValue(Inline.TextDecorationsProperty);
/*
if (tdc == null || !tdc.Equals(TextDecorations.Strikethrough))
{
tdc = TextDecorations.Strikethrough;
}
else
{
tdc = new TextDecorationCollection();
}
* */
if (tdc == null || !tdc.Contains(TextDecorations.Strikethrough[0]))
{
tdc = TextDecorations.Strikethrough;
}
else
{
tdc = new TextDecorationCollection();
}
range.ApplyPropertyValue(Inline.TextDecorationsProperty, tdc);
}
код комментария тоже не работает.
Я собирался опубликовать ExceptionDetails, но я думаю, что это очень ясно.
Может ли кто-нибудь предоставить мне обходной путь?