首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF中的文本下划线

WPF中的文本下划线
EN

Stack Overflow用户
提问于 2010-12-17 19:35:19
回答 2查看 5.1K关注 0票数 3

我有一个WPF用户控件,它有一个TextBox。我将文本设置为Underline或not、Strikethrough或not。

我认为我的代码有问题,尤其是未设置部分,因为每次都不能正常工作.可能有一些下划线的元素被删除了。

特别是当将同一属性多次设置为相同的值时,它会添加和添加.

代码语言:javascript
复制
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);
        }
    }
}

因为我做不到

代码语言:javascript
复制
this.MyTextBlock.TextDecorations.Contains(TextDecorations.Strikethrough);

它添加、添加、再添加,所以当它保持removes...it时:)

示例:

代码语言:javascript
复制
<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>

政务司司长:

代码语言:javascript
复制
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;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-17 20:16:17

“肮脏”解决方案:

代码语言:javascript
复制
    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);
            }
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2010-12-17 19:48:26

我重新创造了它并且工作得很好:

娱乐活动:

XAML:

代码语言:javascript
复制
<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>

代码背后:

代码语言:javascript
复制
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);
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4474123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档