我的xaml代码如下:
<RichTextBox Grid.Row="4" Width="200" Height="60" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" PreviewKeyDown="PreviewKeyDown">
<FlowDocument>
<Paragraph>
<Run Text="{Binding DisplayText, Mode=TwoWay}" />
</Paragraph>
</FlowDocument>
</RichTextBox>
在这个richtextbox中,我首先输入&#34; a&#34;,按回车键,然后输入&#34; b&#34;,DisplayText预期值应为&#34; b&#34;,但实际上它的价值是&#34; a&#34;。
我的PreviewKeyDown代码如下:
private void PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Enter)
{
var newPointer = Richtextbox.Selection.Start.InsertLineBreak();
Richtextbox.Selection.Select(newPointer, newPointer);
e.Handled = true;
}
}
有没有人遇到同样的问题?
答案 0 :(得分:2)
Sarina,没有直接的方法将字符串变量绑定到RichTextbox。在Google上搜索时,您可以找到相同的问题陈述。 PreviewKeyDown仅显示当前键,因此它可能无法显示以前的文本是什么。
简单方法
到设置 RichTextBox文字:
Richtextbox.Document.Blocks.Clear();
Richtextbox.Document.Blocks.Add(new Paragraph(new Run("Text")));
获取 RichTextBox文字:
string richText = new TextRange(Richtextbox.Document.ContentStart, Richtextbox.Document.ContentEnd).Text;
您可以将上述方法与技巧一起使用并获得所需的输出。您可以在PreviewKeyDown事件中手动更新模型。
或强>
这个问题只有一个永久性解决方案是使用附加属性,您可以在其中登录以获取RichTextBox的文本。它可以帮助您轻松获取和设置您的价值。
这是RichTextBox的Text属性的基本代码。您可以根据需要对其进行修改,因为我无法准确编写您需要的内容。但它肯定会帮助您实现您的需求。
public class RichTextBoxHelper
{
/// <summary>
/// Text Attached Dependency Property
/// </summary>
public static readonly DependencyProperty TextProperty =
DependencyProperty.RegisterAttached("Text", typeof(string), typeof(RichTextBoxHelper),
new FrameworkPropertyMetadata((string)null,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault |
FrameworkPropertyMetadataOptions.Journal,
new PropertyChangedCallback(OnTextChanged),
new CoerceValueCallback(CoerceText),
true,
UpdateSourceTrigger.PropertyChanged));
/// <summary>
/// Gets the Text property.
/// </summary>
public static string GetText(DependencyObject d)
{
return (string)d.GetValue(TextProperty);
}
/// <summary>
/// Sets the Text property.
/// </summary>
public static void SetText(DependencyObject d, string value)
{
d.SetValue(TextProperty, value);
}
/// <summary>
/// Returns the Text from a FlowDocument
/// </summary>
/// <param name="document">The document to get the text from</param>
/// <returns>Returns a string with the text of the flow document</returns>
public static string GetText(FlowDocument document)
{
return new TextRange(document.ContentStart, document.ContentEnd).Text;
}
/// <summary>
/// Handles changes to the Text property.
/// </summary>
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
RichTextBox textBox = (RichTextBox)d;
if (e.NewValue != null)
{
textBox.Document.Blocks.Clear();
textBox.Document.Blocks.Add(new Paragraph(new Run(e.NewValue.ToString())));
}
}
}
XAML绑定
<RichTextBox Grid.Row="4" Width="200" Height="60" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" PreviewKeyDown="PreviewKeyDown" local:RichTextBoxHelper.Text="{Binding DisplayText}">
</RichTextBox>