获取字符左侧的char的属性值

时间:2014-05-20 20:25:38

标签: c# wpf richtextbox

我正在创建一个简单的texteditor。我有一个togglebutton的粗体选项。

问题: 当我选择一些文字来制作粗体并按下按钮时,它会使它变为粗体。现在根据我在richtextbox中单击的位置,我需要获取光标左侧字符的属性值,以了解是否应该打开或关闭togglebutton。我希望你理解,它与MS Office Word中的相同。

以下是我认为可以做到的事情:

    private void richTextBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        TextSelection ts = //Selection of the char left of the cursor. Help wanted!

        var charValue = ts.GetPropertyValue(TextElement.FontWeightProperty);

        if ((FontWeight)charValue == FontWeights.Normal)
        {
            boldButton.IsChecked = false;
            isBold = false;
        }
        else if ((FontWeight)charValue == FontWeights.Bold)
        {
            boldButton.IsChecked = true;
            isBold = true;
        }
    }

编辑:

显然这条线完成了工作:

var charValue = richTextBox.Selection.GetPropertyValue(TextElement.FontWeightProperty);

现在唯一的问题是需要2次点击才能执行操作。它可能与我为richTextBox选择的事件有关。但似乎是唯一一个有效的人。

似乎没有对我最新的点击作出反应,而是之前的点击,给我以前点击文字所具有的属性值。

FIXED:

想出如何使用MouseLeftButtonDown事件。工作代码:

richTextBox.AddHandler(RichTextBox.MouseLeftButtonDownEvent, new MouseButtonEventHandler(richTextBox_MouseLeftButtonDown), true);

private void richTextBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var charValue = richTextBox.Selection.GetPropertyValue(TextElement.FontWeightProperty);

        if (charValue != DependencyProperty.UnsetValue && (FontWeight)charValue == FontWeights.Normal)
        {
            boldButton.IsChecked = false;
            isBold = false;
        }
        else if (charValue != DependencyProperty.UnsetValue && (FontWeight)charValue == FontWeights.Bold)
        {
            boldButton.IsChecked = true;
            isBold = true;
        }
    }

1 个答案:

答案 0 :(得分:0)

有一个名为CaretPostion的属性可以告诉您光标的位置。我认为这就是你所需要的一切。