0

我有一个 textBlock,我在其中添加了一些文本,例如如下:

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

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

例如,如果单击“一个”,我希望它具有红色字体;然后如果单击“Two”,我希望“One”再次变为黑色,“Two”变为红色,以便单击的最后一个单词的颜色为红色。

我对使用 c# 和 wpf 进行编程相当陌生。

谢谢你的帮助

4

1 回答 1

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);
    }
}
于 2012-12-03T05:47:22.633 回答