Gtk#:更改AT报告的信息

时间:2013-07-04 17:49:15

标签: c# mono accessibility gtk#

我正在使用AT-SPI来检查我的应用程序的GUI。但是,一些“复选框”不是真正的GTK复选框,它们是自定义小部件。因此,他们不会在AT中报告正确的信息。

有人知道如何解决这个问题吗?我在Mono下用C#编写,使用Gtk#绑定到GTK+。我相信它应该可以使用ATK来改变向AT报告的内容,但所有示例都在C中,并且托管C#绑定的工作方式也有所不同。

任何提示?

1 个答案:

答案 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报告的信息产生任何影响。我甚至尝试先改变状态设置然后再触发事件......它仍然完全没有效果。