У меня есть пользовательский контроль WPF с TextBox. Я установил текст Underline
или нет, Strikethrough
или нет.
Я думаю, что с моим кодом что-то не так, особенно unset part, потому что он не работает должным образом каждый раз ... возможно, некоторые элементы подчеркивания удаляются зачеркнутым? ...
Особенно, если несколько раз присваивать одному и тому же свойству одно и то же значение, оно добавляет и добавляет ....
private void UpdateUnderline()
{
if (this.IsUnderline)
{
this.MyTextBlock.TextDecorations.Add(TextDecorations.Underline);
}
else
{
foreach (var item in TextDecorations.Underline)
{
this.MyTextBlock.TextDecorations.Remove(item);
}
}
}
private void UpdateStrikethrough()
{
if (this.IsStrikethrough)
{
this.MyTextBlock.TextDecorations.Add(TextDecorations.Strikethrough);
}
else
{
foreach (var item in TextDecorations.Strikethrough)
{
this.MyTextBlock.TextDecorations.Remove(item);
}
}
}
как я не могу сделать
this.MyTextBlock.TextDecorations.Contains(TextDecorations.Strikethrough);
он добавляет и добавляет, и добавляет снова, поэтому, когда он удаляет ... он остается:)
Пример:
<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<CheckBox Content="Underline"
IsChecked="{Binding IsUnderline}" />
<CheckBox Content="Strikethrough"
IsChecked="{Binding IsStrikethrough}" />
<TextBlock Name="MyTextBlock"
Text="Quick Brown Fox Jumps Over The Lazy Dog." />
<Button Content="Underline" Name="Underline" Click="Underline_Click"/>
<Button Content="Strikethrough" Name="Strikethrough" Click="Strikethrough_Click"/>
<Button Content="NO Underline" Name="NoUnderline" Click="NoUnderline_Click"/>
<Button Content="NO Strikethrough" Name="NoStrikethrough" Click="NoStrikethrough_Click" />
</StackPanel>
</Grid>
</Window>
CS:
public partial class MainWindow : Window
{
public MainWindow()
{
DataContext = this;
}
private Boolean _IsUnderline;
public Boolean IsUnderline
{
get
{
return _IsUnderline;
}
set
{
_IsUnderline = value;
UpdateUnderline();
}
}
private Boolean _IsStrikethrough;
public Boolean IsStrikethrough
{
get
{
return _IsStrikethrough;
}
set
{
_IsStrikethrough = value;
UpdateStrikethrough();
}
}
private void UpdateUnderline()
{
if (this.IsUnderline)
{
this.MyTextBlock.TextDecorations.Add(TextDecorations.Underline);
}
else
{
foreach (var item in TextDecorations.Underline)
{
this.MyTextBlock.TextDecorations.Remove(item);
}
}
}
private void UpdateStrikethrough()
{
if (this.IsStrikethrough)
{
this.MyTextBlock.TextDecorations.Add(TextDecorations.Strikethrough);
}
else
{
foreach (var item in TextDecorations.Strikethrough)
{
this.MyTextBlock.TextDecorations.Remove(item);
}
}
}
private void Underline_Click(object sender, RoutedEventArgs e)
{
IsUnderline = true;
}
private void Strikethrough_Click(object sender, RoutedEventArgs e)
{
IsStrikethrough = true;
}
private void NoUnderline_Click(object sender, RoutedEventArgs e)
{
IsUnderline = false;
}
private void NoStrikethrough_Click(object sender, RoutedEventArgs e)
{
IsStrikethrough = false;
}
}