【问题标题】:Rich text box keep selected highlighted when focus is lost富文本框在失去焦点时保持选中状态
【发布时间】:2015-04-03 00:45:44
【问题描述】:

我正在创建一个简单的所见即所得编辑器,使用 dockpanel 和一些用于更改字体大小等的按钮,并将 richtextbox 作为主要区域。我可以突出显示文本,然后使用按钮更改字体的大小和系列。但是,当我单击“工具栏”时,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" />

【问题讨论】:

    标签: c# wpf xaml richtextbox


    【解决方案1】:

    啊,解决这个问题的方法是简单地使用&lt;toolbar&gt; 而不是&lt;dockpanel&gt; 来容纳我的按钮。这似乎正是我想要的。

    【讨论】:

      【解决方案2】:

      试试这个:

        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);
          }
      

      【讨论】:

      • 这在我的情况下不起作用。这也意味着需要将相同的代码应用于所有按钮/组合框事件。这似乎很多余。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 2011-07-18
      • 2020-03-18
      • 2015-01-09
      相关资源
      最近更新 更多