更改文本块中单击文本的格式

时间:2012-12-03 04:47:12

标签: c# wpf click format textblock

我有一个textBlock,我添加了一些文字,例如如下:

textBlock1.Inlines.Add(new Run("One "));
textBlock1.Inlines.Add(new Run("Two "));
textBlock1.Inlines.Add(new Run("Three "));

如何添加更改已单击的内联文本颜色的单击事件?

e.g。如果单击“一个”,我希望它有一个红色字体;那么如果单击“两个”,我会再次将“One”变为黑色,将“Two”变为红色,以便点击的最后一个单词的颜色为红色。

我对用c#和wpf编程相当新。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题

     public MainWindow()
    {
        InitializeComponent();
        textBlock1.Inlines.Add(new Run("One "));
        textBlock1.Inlines.Add(new Run("Two "));
        textBlock1.Inlines.Add(new Run("Three "));
    }

    private SolidColorBrush _blackBrush = new SolidColorBrush(Colors.Black);
    private SolidColorBrush _redBrush = new SolidColorBrush(Colors.Red);
    private Run _selectedRun;

    private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
    {
        var run = e.OriginalSource as Run;
        if (run != null)
        {
            if (_selectedRun != null)
            {
                _selectedRun.Foreground = _blackBrush;
                if (_selectedRun == run)
                {
                    return;
                }
            }
            run.Foreground = _redBrush;
            _selectedRun = run;
        }
    }

但你必须处理点击“MouseDown”或“MouseUp”,因为Textblock没有Click事件

要在某个索引处对其进行着色,这是一个快速示例。

private void ColorInlineAtIndex(InlineCollection inlines, int index, Brush brush)
{
    if (index <= inlines.Count - 1)
    {
          inlines.ElementAt(index).Foreground = brush;
    }
}

用法:

 ColorInlineAtIndex(textBlock1.Inlines, 2, new SolidColorBrush(Colors.Blue));

找到位置:

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    var run = e.OriginalSource as Run;
    if (run != null)
    {
        int position = (sender as TextBlock).Inlines.ToList().IndexOf(run);
    }
}