2016-12-04 38 views
1

我正在使用RichEditBox,我在保存和恢复Rtf文本时遇到了一些问题。RichEditBox(UWP)在设置RTF文本时忽略字体和前景

下面是一个示例RTF文本我已经出口,你可以看到有不同的前景颜色和字体家族正确保存(我手动缩进它,使其更易于阅读)

{\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1040 
    {\fonttbl{\f0\fnil\fcharset0 Segoe UI;} 
    {\f1\fnil\fcharset0 Brush Script MT;} 
    {\f2\fnil\fcharset0 Impact;} 
    {\f3\fnil Segoe UI;}} 
{\colortbl ;\red9\green105\blue192;\red0\green0\blue0;\red76\green152\blue25;\red208\green52\blue56;} 
{\*\generator Riched20 10.0.14393}\viewkind4\uc1 
\pard\ltrpar\tx720\cf1\b\i\f0\fs23 Test\cf2\b0\i0\par 
\pard\ltrpar\li320\qc\tx720\cf3\strike\f1\fs40 Some color\cf2\strike0\f0\fs23\par 
\pard\ltrpar\tx720\cf4\f2 Hello!\cf2\f0\par 
\f3\par 
\f0\lang1033\par 
\f3\par 
\par 
\pard\ltrpar\tx720\fs23\par 
} 

问题:我叫

EditBox.Document.SetText(TextSetOptions.FormatRtf, myRtfString); 

而且文本在控件加载,但字体系列和前景颜色是COM完全忽略。 我已经试过电话:

EditBox.Document.ApplyDisplayUpdates(); 

它不能解决问题。我的意思是,为什么所有其他段落/字符选项都恢复正确,但只是忽略字体系列和前景色?我在这里错过了什么吗? 谢谢!

编辑:这是我使用的RichEditBox定制Style

<Style TargetType="RichEditBox" x:Key="CustomRtfEditBoxStyle"> 
    <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}" /> 
    <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}" /> 
    <Setter Property="Foreground" Value="{ThemeResource TextControlForeground}" /> 
    <Setter Property="Background" Value="{ThemeResource TextControlBackground}" /> 
    <Setter Property="SelectionHighlightColor" Value="{ThemeResource TextControlSelectionHighlightColor}" /> 
    <Setter Property="BorderBrush" Value="{ThemeResource TextControlBorderBrush}" /> 
    <Setter Property="BorderThickness" Value="{ThemeResource TextControlBorderThemeThickness}" /> 
    <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" /> 
    <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" /> 
    <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto" /> 
    <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto" /> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /> 
    <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" /> 
    <Setter Property="TextWrapping" Value="Wrap" /> 
    <Setter Property="Padding" Value="{ThemeResource TextControlThemePadding}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="RichEditBox"> 
       <Grid> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Disabled" /> 
          <VisualState x:Name="Normal" /> 
          <VisualState x:Name="PointerOver" /> 
          <VisualState x:Name="Focused" /> 
          <VisualState x:Name="UnFocused" /> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 
        <Border x:Name="BorderElement" 
          Grid.Row="1" 
          Background="{ThemeResource TextControlBackgroundFocused}" 
          BorderThickness="0" 
          Grid.ColumnSpan="2" 
          Grid.RowSpan="1" /> 
        <ContentPresenter x:Name="HeaderContentPresenter" 
            x:DeferLoadStrategy="Lazy" 
            Visibility="Collapsed" 
            Grid.Row="0" 
            Margin="0,0,0,8" 
            Grid.ColumnSpan="2" 
            Content="{TemplateBinding Header}" 
            ContentTemplate="{TemplateBinding HeaderTemplate}" 
            FontWeight="Normal" /> 
        <ScrollViewer x:Name="ContentElement" 
            RequestedTheme="Light" 
           Grid.Row="1" 
           HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" 
           HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" 
           VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" 
           VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" 
           IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" 
           IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" 
           IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" 
           Margin="{TemplateBinding BorderThickness}" 
           Padding="{TemplateBinding Padding}" 
           IsTabStop="False" 
           ZoomMode="Disabled" 
           AutomationProperties.AccessibilityView="Raw" /> 
        <ContentControl x:Name="PlaceholderTextContentPresenter" 
            Grid.Row="1" 
            Margin="{TemplateBinding BorderThickness}" 
            Padding="{TemplateBinding Padding}" 
            IsTabStop="False" 
            Grid.ColumnSpan="2" 
            Content="{TemplateBinding PlaceholderText}" 
            IsHitTestVisible="False" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

1

目前不能在最新窗口通过代码10的构建14393重现该问题如下:

XAML代码

... mc:Ignorable="d" Loaded="Page_Loaded"> 
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <RichEditBox x:Name="EditBox" Height="400" Margin="40" > 
    </RichEditBox> 
</StackPanel> 

后面的代码:

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    string myRtfString = @"{\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1040 
{\fonttbl{\f0\fnil\fcharset0 Segoe UI;} 
{\f1\fnil\fcharset0 Brush Script MT;} 
{\f2\fnil\fcharset0 Impact;} 
{\f3\fnil Segoe UI;}} 
{\colortbl ;\red9\green105\blue192;\red0\green0\blue0;\red76\green152\blue25;\red208\green52\blue56;} 
{\*\generator Riched20 10.0.14393}\viewkind4\uc1 
\pard\ltrpar\tx720\cf1\b\i\f0\fs23 Test\cf2\b0\i0\par 
\pard\ltrpar\li320\qc\tx720\cf3\strike\f1\fs40 Some color\cf2\strike0\f0\fs23\par 
\pard\ltrpar\tx720\cf4\f2 Hello!\cf2\f0\par 
\f3\par 
\f0\lang1033\par 
\f3\par 
\par 
\pard\ltrpar\tx720\fs23\par 
}"; 
    EditBox.Document.SetText(TextSetOptions.FormatRtf, myRtfString); 
} 

如果您仍想在您的环境中使用某种解决方法,请尝试在RichEditTextBox的风格下找到以下“聚焦ViewState”下的代码并注释掉它。欲了解更多详情,请参考this thread

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentElement"> 
    <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlForegroundChromeBlackHighBrush}"/> 
</ObjectAnimationUsingKeyFrames> 
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="RequestedTheme" Storyboard.TargetName="ContentElement"> 
    <DiscreteObjectKeyFrame KeyTime="0" Value="Light"/> 
</ObjectAnimationUsingKeyFrames> 

而且就在我身边,结果: enter image description here

+0

非常感谢你的回答!我已经删除了这些视觉状态(我用我正在使用的完整样式编辑了我的答案),我刚刚按照您的建议(我在页面构造函数中调用它)将SetText调用移入Loaded事件处理程序,并解决了问题。干杯! – Sergio0694