我使用ITextParagraphPropertiesFactoryService类以自定义方式创建扩展,即格式与编辑器选项卡。一切正常,期望事实,当用户输入新行时,ITextParagraphPropertiesFactoryService不会影响到新行
为了简化问题,我创建了一个新的MEF项目,添加像这样的格式提供程序
[Export(typeof(ITextParagraphPropertiesFactoryService))]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Document)]
internal class ElasticTabstopsProvider : ITextParagraphPropertiesFactoryService
{
/// <summary>
/// Creates an ElasticTabstopsFormatters for
/// the provided configuration.
/// </summary>
public TextParagraphProperties Create(IFormattedLineSource formattedLineSource, TextFormattingRunProperties textProperties,
IMappingSpan line, IMappingPoint lineStart, int lineSegment)
{
return new TextFormattingParagraphProperties(textProperties, 1);
}
}
它将我的编辑器中的所有标签宽度更改为1.太棒了!这就是我要的。但是现在当我按Enter(新行)时,在Main下设置了新光标,但我希望标签宽度为1。
开始输入后,它会进入预期位置。
问题是,如何设置新行空行标签大小?
我试图覆盖ISmartIndentProvider
,但似乎vs忽略该值。
Debuger在方法
中的断点处停止int? GetDesiredIndentation(ITextSnapshotLine currentLine)
ISmartIndent
的,但无论我返回什么值,缩进都保持不变...
答案 0 :(得分:1)
至少有两个原因导致您的ISmartIndentProvider缩进被忽略:
首先,有许多地方使用当前的C#和VB语言服务,我们明确设置插入位置以响应某些按键。输入就是其中之一。很可能在你的场景中,我们明确地设定了位置。没有在工具中禁用智能缩进&gt;选项,没有什么可以覆盖它。既然你说你的ISmartIndentProvider中有调试器命中,这可能是问题所在。
其次,如果您尝试为内容类型“text”定义ISmartIndentProvider,如果存在特定于语言的提供程序,则不会调用您的ISmartIndentProvider。还有另一个“文本”提供者(称为已经破旧的旧语言服务),无论如何都可能赢得你的支持。
说实话,如果你想尝试做一些你不想要自动缩进的东西,那么你真的应该把它关掉以确保它不会妨碍你。