Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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# 当文本元素滚动到第一行之外时,Metro应用程序的UI自动化出现错误_C#_Microsoft Metro_Microsoft Ui Automation - Fatal编程技术网

C# 当文本元素滚动到第一行之外时,Metro应用程序的UI自动化出现错误

C# 当文本元素滚动到第一行之外时,Metro应用程序的UI自动化出现错误,c#,microsoft-metro,microsoft-ui-automation,C#,Microsoft Metro,Microsoft Ui Automation,我正在尝试使用以下代码提取鼠标下的文本 private static async Task<string> getText(double x, double y) { try { var location = new System.Windows.Point(x, y); AutomationElement element = AutomationElement.FromPoint(location); object

我正在尝试使用以下代码提取鼠标下的文本

private static async Task<string> getText(double x, double y)
{
    try
    {
        var location = new System.Windows.Point(x, y);
        AutomationElement element = AutomationElement.FromPoint(location);

        object patternObj;
        if (element.TryGetCurrentPattern(TextPattern.Pattern, out patternObj))
        {
            var textPattern = (TextPattern)patternObj;

            var range = textPattern.RangeFromPoint(location);
            range.ExpandToEnclosingUnit(TextUnit.Word);                    
            var text = range.GetText(-1).Trim();

            range.ExpandToEnclosingUnit(TextUnit.Line);
            text += " [" + range.GetText(-1).Trim() + "]";
            return text;
        }
        else if (element.TryGetCurrentPattern(ValuePattern.Pattern, out patternObj))
        {
            var valuePattern = (ValuePattern)patternObj;
            return valuePattern.Current.Value;
        }
        else
        {
            var text = "";
            var patterns = element.GetSupportedPatterns();
            foreach (var pattern in patterns)
            {
                text += pattern.Id + " " + pattern.ProgrammaticName;
                text += Environment.NewLine;
            }

            return text;
        }
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}
private静态异步任务getText(双x,双y)
{
尝试
{
var位置=新系统.Windows.Point(x,y);
AutomationElement元素=AutomationElement.FromPoint(位置);
对象模式OBJ;
if(element.TryGetCurrentPattern(TextPattern.Pattern,out patternObj))
{
var textPattern=(textPattern)patternObj;
变量范围=textPattern.RangeFromPoint(位置);
range.ExpandToEnclosingUnit(TextUnit.Word);
var text=range.GetText(-1.Trim();
range.ExpandToEnclosingUnit(TextUnit.Line);
text+=“[”+range.GetText(-1.Trim()+“]”;
返回文本;
}
else if(element.TryGetCurrentPattern(ValuePattern.Pattern,out patternObj))
{
var valuePattern=(valuePattern)patternObj;
返回值pattern.Current.Value;
}
其他的
{
var text=“”;
var patterns=element.GetSupportedPatterns();
foreach(模式中的var模式)
{
text+=pattern.Id+“”+pattern.ProgrammaticName;
text+=Environment.NewLine;
}
返回文本;
}
}
捕获(例外情况除外)
{
返回ex.消息;
}
}
这正常工作(使用Money Metro应用程序进行测试)。但是,如果文本框滚动到第一行之外,UI自动化会开始提取错误的文本,因为它认为窗口的顶部就是文本的顶部。例如,对于下图,鼠标处于“递增”状态,文本顶部(以“多数…”开头)可见

如果我们滚动过第一行,并再次将鼠标置于“增加”位置,这一次它会感到困惑,并从上面的行拖动。随着我们滚动越来越多,位移变得越来越大。在下图中,它从上面的行中拾取“with”

任何解决方法的想法也非常感谢

更新。本例中的“类”是RichTextBlock。Windows应用商店中的TextBlock中存在相同问题。似乎是RangeFromPoint不考虑滚动超过第一行的问题