我在WPF桌面应用程序中遇到以下问题时遇到问题:
我从后面的代码动态创建TextBlocks并将它们插入到StackPanel中。这项工作到目前为止。当用户将鼠标移到TextBlock上时,Strikthrough将应用于 textblock ,表示可以通过单击删除该项目。同样,这仍然有效。当鼠标离开文本块时,删除删除线,这里抛出异常,说IsFrozen必须设置为false才能更改TextDecorationCollection对象。我无法弄清楚如何解决这个问题。
这是我的代码:
private void HandleAddedSecondaryDxMouseEnter(Object sender, MouseEventArgs e) {
TextBlock tbl = (TextBlock)sender;
tbl.TextDecorations = TextDecorations.Strikethrough;
}
private void HandleAddedSecondaryDxMouseLeave(Object sender, MouseEventArgs e) {
TextBlock tbl = (TextBlock)sender;
tbl.TextDecorations.Remove(tbl.TextDecorations[0]);
}
非常感谢任何帮助。
谢谢, 贝恩德
答案 0 :(得分:6)
我发现以下内容最适合我:
TextDecorationCollection decs = (TextDecorationCollection)theRTB.Selection.GetPropertyValue( Inline.TextDecorationsProperty );
if (decs.Contains(TextDecorations.Underline[0]))
{
TextDecorationCollection noUnder = new TextDecorationCollection(decs);
noUnder.Remove(TextDecorations.Underline[0]); //this is a bool, and could replace Contains above
theRTB.Selection.ApplyPropertyValue(Inline.TextDecorationsProperty, noUnder);
}
显然这是为了删除下划线装饰,但我认为删除线也不例外。
答案 1 :(得分:5)
您可以将TextDecorations
设置为null
,这将清除Strikethrough
TextBlock
装饰
private void HandleAddedSecondaryDxMouseLeave(Object sender, MouseEventArgs e)
{
TextBlock tbl = (TextBlock)sender;
tbl.TextDecorations = null;
}
答案 2 :(得分:0)
我使用下面的代码删除了文本范围的下划线。同样适用于TextBlock。
TextDecorationCollection textDecorations;
(textRange.GetPropertyValue(Inline.TextDecorationsProperty) as TextDecorationCollection).TryRemove(TextDecorations.Underline, out textDecorations);
textRange.ApplyPropertyValue(Inline.TextDecorationsProperty, textDecorations);