我正在创建一个简单的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;
}
}