Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将换行设置为RichEditBox的实际高度?_C#_Xaml_Uwp_Uwp Xaml - Fatal编程技术网

C# 如何将换行设置为RichEditBox的实际高度?

C# 如何将换行设置为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

如果用户单击my
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);