C# 在visual studio编辑器中获取任何字符的逻辑像素宽度?

C# 在visual studio编辑器中获取任何字符的逻辑像素宽度?,c#,visual-studio-2012,visual-studio-addins,visual-studio-sdk,C#,Visual Studio 2012,Visual Studio Addins,Visual Studio Sdk,我正在为VS2012做一个编辑器扩展,我需要在编辑器中找到任何字符的逻辑像素宽度 我认为所有字符共享相同的宽度,但共享的宽度随着编辑器缩放量的变化而变化;当缩放为100%时,所有字符的宽度均为7个逻辑像素,否则它们的宽度均为7.33个逻辑像素 我可以通过书写找到任何字符的宽度: //textview是一个ITextView textview.Caret.ContainingTextViewLine.TextWidth/textview.Caret.ContainingTextViewLine.

我正在为VS2012做一个编辑器扩展,我需要在编辑器中找到任何字符的逻辑像素宽度

我认为所有字符共享相同的宽度,但共享的宽度随着编辑器缩放量的变化而变化;当缩放为100%时,所有字符的宽度均为7个逻辑像素,否则它们的宽度均为7.33个逻辑像素

我可以通过书写找到任何字符的宽度:

//textview是一个ITextView
textview.Caret.ContainingTextViewLine.TextWidth/
textview.Caret.ContainingTextViewLine.Length


但是,问题是插入符号所在的行为空时,因为该行将被零除。

我没有找到问题的答案,但我找到了问题的解决方案:

VirtualSnapshotPoint Get_point(ITextCaret caret)
    {
    caret.ContainingTextViewLine.GetInsertionBufferPositionFromXCoordinate(...);
    }

这种方法使我无需处理任何字符的逻辑像素宽度。

我没有找到问题的答案,但我找到了解决问题的方法:

VirtualSnapshotPoint Get_point(ITextCaret caret)
    {
    caret.ContainingTextViewLine.GetInsertionBufferPositionFromXCoordinate(...);
    }

这种方法使我不必处理任何字符的逻辑像素宽度。

当你需要宽度时,你不能模拟一个空格,获取宽度,然后模拟删除空格吗?是的,我可以,但这看起来像是一个黑客。这是我最后的办法。使用textwidth函数..我解决了我的问题,但没有找到这个问题的答案。我应该结束这个问题吗?@daniel1426添加您的解决方案作为答案,以防其他人可能想要使用它。当您想要宽度时,您不能只模拟一个空间,获取宽度,然后模拟删除空间吗?是的,我可以,但这看起来像是一个黑客。这是我最后的办法。使用textwidth函数..我解决了我的问题,但没有找到这个问题的答案。我应该结束这个问题吗?@daniel1426添加您的解决方案作为答案,以防其他人想要使用它