【问题标题】:Making a custom editor with Windows XAML RichEditBox使用 Windows XAML RichEditBox 制作自定义编辑器
【发布时间】:2014-12-20 21:27:34
【问题描述】:

我正在使用 C# 和 XAML RichEditBox 创建一个带有自定义键盘的文本编辑器。我需要能够模拟通常由内置键盘处理的功能。我希望能帮助您理解以下内容:

  • 防止键盘出现(有一个属性可以防止它出现在程序焦点上,而不是用户焦点上。我也可以通过设置 IsReadOnly 属性来隐藏它,但是我无法修改文本)
  • 处理退格。 Document.Selection 上有一个 Delete 功能,但它的作用是 Delete,而不是 Backspace(从错误的方向拉)
  • 需要防止水平滚动。即使将 Horizo​​ntalScrollVisibility 设置为 Disabled,文本也会从侧面滚动。不知道还能在这里做什么。

很抱歉基本上把三个问题塞进了一个问题,但似乎有正确知识的人这样会更轻松。谢谢!

为了简单起见,这里是我当前的属性:

VerticalAlignment="Stretch" Horizo​​ntalAlignment="Stretch" AcceptsReturn="True" IsTextPredictionEnabled="False" PreventKeyboardDisplayOnProgrammaticFocus="True" IsSpellCheckEnabled="False" VerticalContentAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.Horizo​​ntalScrollBarVisibility="已禁用”

【问题讨论】:

  • 你到底想让退格做什么?
  • 我希望它表现正常,即删除左边的字符(假设从左到右布局)。删除删除右侧的字符。由于我是从头开始制作键盘,因此我需要自己实现。我不想操纵包含的字符串。我正在使用文档方法。这是我尝试过的:EditBox.Document.Selection.Delete(Windows.UI.Text.TextRangeUnit.Character, 1);
  • 好的。也想通了。原来你只是删除 -1 个字符!哎呀。

标签: c# xaml winrt-xaml


【解决方案1】:

需要防止水平滚动:

我猜这个 RichEditBox 包含在 ScrollViewer 中。您设置 Horizo​​ntalAlignment = "Stretch" 表示采用父元素的整个布局。将其设置为居中、左或右。

【讨论】:

  • 我没有把它放到一个 ScrollViewer 虽然默认模板可能使用一个。将 RichEditBox 更改为 Center 只会使其尺寸缩小并与中心对齐。我刚刚发现了另一个与滚动相关的属性,但它也没有帮助:ScrollViewer.HorizontalScrollMode="Disabled"我需要它来自动换行!
  • 然后你需要发布你的整个布局。如果我只是拿一个 并在里面放一个 我不会得到水平滚动并且我的文本会换行。我看到你的行为是在有无限水平和垂直空间的 ScrollViewer 中放入某些东西。
  • Grrr。刚找到! TextWrapping="WrapWholeWords" 它仍然没有换行。它显然确实认为它在更广泛的父控件中。
  • 感谢您的帮助!它实际上是 Grid 内的一个简单的 RichEditBox:` ` 属性被省略,因为它们已经在上面而且我的字符用完了!
  • 所以事实证明包装的正确答案是TextWrapping="Wrap" 这是一种非英语语言,所以必须解释一下。太难了!
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多