富文本框在失去焦点时保持选中状态突出显示
Rich text box keep selected highlighted when focus is lost
我正在创建一个简单的所见即所得编辑器,方法是使用 dockpanel
和一些用于更改字体大小等的按钮,并将 richtextbox
作为主要区域。我可以突出显示文本,然后使用按钮更改字体的大小和系列。但是,当我单击 "toolbar" 时,RichTextBox
失去焦点并且所选文本不再突出显示。我发现了几个 hacky 解决方案,例如在失去焦点事件上设置 e.handled =true;
,这可行,但是如果字体大小发生变化,例如,文本现在大于突出显示。对此有更好的解决方案吗?
这是一些精简代码:
<DockPanel>
<DockPanel >
<ToggleButton Height="24" Margin="3" Name="Bold">
<TextBlock FontWeight="ExtraBold" Text="B" />
</ToggleButton>
<ToggleButton Height="24" Margin="3" Name="Italic">
<TextBlock FontStyle="Italic" Text="I" />
</ToggleButton>
<ToggleButton Height="24" Margin="3" Name="Underline">
<TextBlock TextDecorations="Underline" Text="U" />
</ToggleButton>
<ComboBox Height="24" Margin="3" Name="FontFamily" Width="150" SelectionChanged="FontFamily_SelectionChanged"/>
<ComboBox Height="24" Margin="3" Name="FontSize" Width="50" IsEditable="True" TextBoxBase.TextChanged="FontSize_TextChanged" />
</DockPanel>
</DockPanel>
<RichTextBox Name="Editor" />
试试这个:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
currentSize ++;
RichTextBox.Selection.ApplyPropertyValue(TextElement.FontSizeProperty, currentSize);
Keyboard.Focus(RichTextBox);
RichTextBox.Selection.Select(RichTextBox.Selection.Start, RichTextBox.Selection.End);
}
啊,解决这个问题的方法是简单地使用 <toolbar>
而不是 <dockpanel>
来放置我的按钮。这似乎正是我想要的。
我正在创建一个简单的所见即所得编辑器,方法是使用 dockpanel
和一些用于更改字体大小等的按钮,并将 richtextbox
作为主要区域。我可以突出显示文本,然后使用按钮更改字体的大小和系列。但是,当我单击 "toolbar" 时,RichTextBox
失去焦点并且所选文本不再突出显示。我发现了几个 hacky 解决方案,例如在失去焦点事件上设置 e.handled =true;
,这可行,但是如果字体大小发生变化,例如,文本现在大于突出显示。对此有更好的解决方案吗?
这是一些精简代码:
<DockPanel>
<DockPanel >
<ToggleButton Height="24" Margin="3" Name="Bold">
<TextBlock FontWeight="ExtraBold" Text="B" />
</ToggleButton>
<ToggleButton Height="24" Margin="3" Name="Italic">
<TextBlock FontStyle="Italic" Text="I" />
</ToggleButton>
<ToggleButton Height="24" Margin="3" Name="Underline">
<TextBlock TextDecorations="Underline" Text="U" />
</ToggleButton>
<ComboBox Height="24" Margin="3" Name="FontFamily" Width="150" SelectionChanged="FontFamily_SelectionChanged"/>
<ComboBox Height="24" Margin="3" Name="FontSize" Width="50" IsEditable="True" TextBoxBase.TextChanged="FontSize_TextChanged" />
</DockPanel>
</DockPanel>
<RichTextBox Name="Editor" />
试试这个:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
currentSize ++;
RichTextBox.Selection.ApplyPropertyValue(TextElement.FontSizeProperty, currentSize);
Keyboard.Focus(RichTextBox);
RichTextBox.Selection.Select(RichTextBox.Selection.Start, RichTextBox.Selection.End);
}
啊,解决这个问题的方法是简单地使用 <toolbar>
而不是 <dockpanel>
来放置我的按钮。这似乎正是我想要的。