데이터 바운드 속성을 통해 TextBlock에 TextDecoration (예 : 취소 선)을 추가하려고합니다.TextBlock에 프로그래밍 방식으로 TextDecoration을 추가하면 InvalidOperationException이 발생합니다.
최소 예 :
public partial class TextDecoTest : Window
{
public TextDecoTest()
{
DataContext = this;
InitializeComponent();
TextDeco.Add(TextDecorations.Strikethrough); //Exception here
}
public TextDecorationCollection TextDeco
{
get { return (TextDecorationCollection)GetValue(TextDecoProperty); }
set { SetValue(TextDecoProperty, value); }
}
public static readonly DependencyProperty TextDecoProperty =
DependencyProperty.Register("TextDeco", typeof(TextDecorationCollection), typeof(TextDecoTest), new PropertyMetadata(new TextDecorationCollection()));
}
XAML :
가<Window>
<TextBlock Text="Test" TextDecorations="{Binding TextDeco}" />
</Window>
그러나 TextDecoration의 추가가 실패 :
규정치 형 'System.Windows.TextDecorationCollection'해야 IsFrozen을 false로 설정하여 수정하십시오.
좋아요,하지만 WPF에서 컨트롤을 실제로 고정 해제 할 수 없기 때문에 약간 엉망입니다. 새 TextDecorationCollection을 만들고 장식을 추가 한 다음 전체 컬렉션을 바꾸면 작동하지만이 경우에는 실제로 가능하지 않으며 잘못 생각됩니다. 이 문제에 대한 다른 언급이 몇 개 있었지만 .NET 4.5 (4.6.1을 사용)로 수정 된 버그를 언급 한 것 같습니다.
그러나 전체 수집을 바꾸면 결합 할 수 있습니다. 새로운 것과 함께 :'var td = TextDeco.Clone(); td.Add (TextDecorations.Strikethrough); td.Add (TextDecorations.Underline); TextDeco = td;' – Lennart