0

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

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

有什么提示吗?

4

1 回答 1

0

该类Gtk.Widget具有Accessibletype 的属性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)看起来它可能会发送一个更改信号,指示某个状态类型现在具有给定的布尔值。

  • Atk.Object.RefStateSet()返回一个Atk.StateSet,您可以在其上调用AddState(Atk.StateType)RemoveState(Atk.StateType)

这些实际上都对 AT 报告的信息没有任何影响。我什至尝试先更改状态集然后再触发事件......它仍然完全没有效果。

于 2013-07-05T11:33:16.057 回答