.net WPF中的下划线文本
我有一个WPF用户控件,它有一个文本框。我设置了文本.net WPF中的下划线文本,.net,wpf,user-controls,.net,Wpf,User Controls,我有一个WPF用户控件,它有一个文本框。我设置了文本下划线与否,删除线与否 我认为我的代码有问题,尤其是未设置的部分,因为每次都不能正常工作。。。可能下划线的某些元素已用删除线删除 特别是当将同一属性多次设置为同一值时,它会不断添加 private void UpdateUnderline() { if (this.IsUnderline) { this.MyTextBlock.TextDecorations.Add(TextDecorations.Underli
下划线
与否,删除线
与否
我认为我的代码有问题,尤其是未设置的部分,因为每次都不能正常工作。。。可能下划线的某些元素已用删除线删除
特别是当将同一属性多次设置为同一值时,它会不断添加
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);
它不断地添加,再添加,所以当它删除…时,它仍然是:)
例子:
我重新创建了它,效果很好: 娱乐: XAML: “脏”解决方案:
private void UpdateUnderline()
{
if (this.IsUnderline)
{
foreach (var item in TextDecorations.Underline)
{
this.MyTextBlock.TextDecorations.Remove(item);
}
this.MyTextBlock.TextDecorations.Add(TextDecorations.Underline);
}
else
{
foreach (var item in TextDecorations.Underline)
{
this.MyTextBlock.TextDecorations.Remove(item);
}
}
}
为什么你要在你的if语句的非真块上对每个都做一个计算?@Nate:因为这就是生活:)。。。我也不知道。
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;
}
}
<Window x:Class="WpfApplication1.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." />
</StackPanel>
</Grid>
</Window>
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 UpdateUnderline()
{
if (this.IsUnderline)
{
foreach (var item in TextDecorations.Underline)
{
this.MyTextBlock.TextDecorations.Remove(item);
}
this.MyTextBlock.TextDecorations.Add(TextDecorations.Underline);
}
else
{
foreach (var item in TextDecorations.Underline)
{
this.MyTextBlock.TextDecorations.Remove(item);
}
}
}