C# 如何将换行设置为RichEditBox的实际高度?
如果用户单击myC# 如何将换行设置为RichEditBox的实际高度?,c#,xaml,uwp,uwp-xaml,C#,Xaml,Uwp,Uwp Xaml,如果用户单击myRichEditBox,则插入指针应出现在行的开头,而不是字符串的结尾。例如,假设RichEditBox的高度可以包含5行,因此当用户单击第3行时,插入指针应该位于第3行的开头,而不是第1行。这很难解释,我希望你能理解 为了实现这一点,我考虑在默认情况下将换行符设置为RichEditBox的末尾 已尝试解决方案: 我用下面的代码来做,但它不工作 var oldActualHeight = PATH_RICH_EDIT_BOX.ActualHeight; while (PATH_R
RichEditBox
,则插入指针应出现在行的开头,而不是字符串的结尾。例如,假设RichEditBox
的高度可以包含5行,因此当用户单击第3行时,插入指针应该位于第3行的开头,而不是第1行。这很难解释,我希望你能理解
为了实现这一点,我考虑在默认情况下将换行符设置为RichEditBox
的末尾
已尝试解决方案:
我用下面的代码来做,但它不工作
var oldActualHeight = PATH_RICH_EDIT_BOX.ActualHeight;
while (PATH_RICH_EDIT_BOX.ActualHeight <= oldActualHeight)
{
PATH_RICH_EDIT_BOX.Document.GetText(Windows.UI.Text.TextGetOptions.None, out string a);
PATH_RICH_EDIT_BOX.Document.SetText(Windows.UI.Text.TextSetOptions.None, a + Environment.NewLine);
}
var oldcactualheight=PATH\u RICH\u EDIT\u BOX.ActualHeight;
而(PATH_RICH_EDIT_BOX.ActualHeight目前还没有这样的api可以获取RichEditBox
的每一行。因此,如果您想将光标移动到行的开始位置,可以获取行的开始位置并将其聚焦
最重要的是,您应该获得RichEditBox
文档的起点
public MainPage()
{
this.InitializeComponent();
ITextSelection selection = PATH_RICH_EDIT_BOX.Document.Selection;
selection.StartPosition = 0;
selection.EndPosition = 0;
originPoint = new Point();
selection.GetPoint(HorizontalCharacterAlignment.Left, VerticalCharacterAlignment.Baseline, PointOptions.Start, out originPoint);
}
它们对于每一行的起始点都有相同的X
。因此,您可以通过当前光标位置获得行的起始点
private void ChangeButton_Click(object sender, RoutedEventArgs e)
{
Point point = new Point();
ITextSelection selection = PATH_RICH_EDIT_BOX.Document.Selection;
var sta = selection.StartPosition;
var en = selection.EndPosition;
selection.GetPoint(HorizontalCharacterAlignment.Left, VerticalCharacterAlignment.Baseline, PointOptions.Start, out point);
point = new Point(originPoint.X, point.Y);
var pgformat = selection.ParagraphFormat;
selection.SetPoint(point, PointOptions.Start, false);
var start = selection.StartPosition;
var end = selection.EndPosition;
PATH_RICH_EDIT_BOX.Document.Selection.SetRange(start, end + 1);
PATH_RICH_EDIT_BOX.Focus(FocusState.Pointer);
}
请注意,上一行有一个空格的结束位置与当前行的开始位置相同。因此,您应该使用一个长度范围来区分它们
PATH_RICH_EDIT_BOX.Document.Selection.SetRange(start, end + 1);
为什么要将第二个代码块放入按钮\u Click
事件中?我应该何时调用第二个代码块中的代码?当光标位于某行的任何位置时。它不工作。我在PointerPressedEvent中调用了此代码。上面的答案是简单的测试示例,无法应用于所有场景。
PATH_RICH_EDIT_BOX.Document.Selection.SetRange(start, end + 1);