3

WPF デスクトップ アプリケーションで次の動作を実現するのに問題があります。

コード ビハインドから TextBlocks を動的に作成し、それらを StackPanel に挿入します。これはこれまでのところ機能します。ユーザーがマウスを TextBlock の上に移動すると、取り消し線がtextblockに適用され、アイテムをクリックして削除できることを示します。繰り返しますが、これはまだ機能します。マウスがtextblockを離れると、取り消し線が削除されます。ここで、TextDecorationCollection オブジェクトを変更するには IsFrozen を false に設定する必要があるという例外がスローされます。これを回避する方法を理解できませんでした。

これが私のコードです:

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]);
}

どんな助けでも大歓迎です。

ありがとう、ベルント

4

3 に答える 3

8

私は次のことが私にとって最もうまくいくことを発見しました:

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);
}

明らかにこれは下線の装飾を削除するためですが、取り消し線も例外ではないと思います。

于 2014-08-30T10:34:45.717 に答える
5

を に設定できます。これTextDecorationsにより、装飾nullがクリアされます。StrikethroughTextBlock

private void HandleAddedSecondaryDxMouseLeave(Object sender, MouseEventArgs e)
{
    TextBlock tbl = (TextBlock)sender;
    tbl.TextDecorations = null;
}
于 2013-05-11T00:34:55.787 に答える