我正在使用AT-SPI
来检查我的应用程序的GUI。但是,一些“复选框”不是真正的GTK复选框,它们是自定义小部件。因此,他们不会在AT中报告正确的信息。
有人知道如何解决这个问题吗?我在Mono下用C#编写,使用Gtk#
绑定到GTK+
。我相信它应该可以使用ATK来改变向AT报告的内容,但所有示例都在C中,并且托管C#绑定的工作方式也有所不同。
任何提示?
答案 0 :(得分:0)
Gtk.Widget
类的Accessible
属性类型为Atk.Object
。您可以获取但不能设置此属性。您也无法在子类中覆盖它。但是,Atk.Object
似乎有几个可写属性,写入它们会更改AT返回的信息。
例如:
var widget = new Gtk.Label("Hello World");
widget.Accessible.Role = Atk.Role.PushButton;
这会创建一个普通的标签小部件,但会导致AT认为它实际上是一个按钮小部件。
我还没有确定如何更改窗口小部件的明显状态。有两种方式看起来应该:
Atk.Object.NotifyStateChange(Atk.StateType, bool)
看起来可能会发送一个更改信号,表明某个状态类型现在具有给定的bool值。
Atk.Object.RefStateSet()
返回Atk.StateSet
,您可以在其上致电AddState(Atk.StateType)
和RemoveState(Atk.StateType)
。
这些实际都不会对AT报告的信息产生任何影响。我甚至尝试先改变状态设置然后再触发事件......它仍然完全没有效果。