C# 设置Rtf文本时,RichEditBox(UWP)忽略字体和前景
我正在使用C# 设置Rtf文本时,RichEditBox(UWP)忽略字体和前景,c#,xaml,windows-runtime,uwp,windows-10,C#,Xaml,Windows Runtime,Uwp,Windows 10,我正在使用RichEditBox,在保存和恢复Rtf文本时遇到一些问题 以下是我导出的Rtf文本示例,正如您所看到的,正确保存了不同的前景色和字体系列(我已手动缩进以便于阅读): 问题:我打电话 EditBox.Document.SetText(TextSetOptions.FormatRtf, myRtfString); 文本将加载到控件中,但字体系列和前景色将被完全忽略。 我已经试过打电话: EditBox.Document.ApplyDisplayUpdates(); 这并不能解决问题
RichEditBox
,在保存和恢复Rtf文本时遇到一些问题
以下是我导出的Rtf文本示例,正如您所看到的,正确保存了不同的前景色和字体系列(我已手动缩进以便于阅读):
问题:我打电话
EditBox.Document.SetText(TextSetOptions.FormatRtf, myRtfString);
文本将加载到控件中,但字体系列和前景色将被完全忽略。
我已经试过打电话:
EditBox.Document.ApplyDisplayUpdates();
这并不能解决问题。我的意思是,为什么所有其他段落/字符选项都被正确恢复,而只忽略字体系列和前景色?我是不是遗漏了什么?
谢谢
Edit:这是我用于RichEditBox
的自定义样式:
<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>
此问题目前无法通过以下代码在最新的windows 10 build 14393中复制:
XAML代码
... mc:Ignorable="d" Loaded="Page_Loaded">
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<RichEditBox x:Name="EditBox" Height="400" Margin="40" >
</RichEditBox>
</StackPanel>
如果您仍然希望在您的环境中找到解决方案,请尝试以RichEditTextBox
的样式查找“聚焦视图状态”下的以下代码,并将其注释掉。有关这方面的更多详细信息,请参考
我这边的结果是:
非常感谢您的回答!我已经删除了这些可视状态(我用我正在使用的完整样式编辑了我的答案),我只是按照您的建议将SetText调用移动到加载的事件处理程序中(我在页面构造函数中调用它),它解决了这个问题。干杯
... 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);
}
<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>