我有一个WPF用户控件,其中包含一个文本框。我可以设置文本是否
我认为我的代码有问题,特别是在取消设置部分,因为它并不总是正常工作...可能会删除一些带有
当多次将相同属性设置为相同值时,它会不断添加...
下划线
或删除线
。我认为我的代码有问题,特别是在取消设置部分,因为它并不总是正常工作...可能会删除一些带有
下划线
的元素?......当多次将相同属性设置为相同值时,它会不断添加...
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;
}
}