我正在使用AT-SPI
来检查我的应用程序的GUI。但是,某些“复选框”不是真正的GTK复选框,它们是自定义小部件。因此,他们不会在AT中报告正确的信息。Gtk#:更改由AT报告的信息
有没有人知道我会如何解决这个问题?我正在用Mono编写C#,使用Gtk#
绑定到GTK+
。我相信应该可以使用ATK来改变报告给AT的内容,但所有的例子都在C中,并且托管的C#绑定工作方式有点不同。
任何提示?
我正在使用AT-SPI
来检查我的应用程序的GUI。但是,某些“复选框”不是真正的GTK复选框,它们是自定义小部件。因此,他们不会在AT中报告正确的信息。Gtk#:更改由AT报告的信息
有没有人知道我会如何解决这个问题?我正在用Mono编写C#,使用Gtk#
绑定到GTK+
。我相信应该可以使用ATK来改变报告给AT的内容,但所有的例子都在C中,并且托管的C#绑定工作方式有点不同。
任何提示?
的Gtk.Widget
类有Atk.Object
类型的Accessible
属性。你可以得到但不是集此属性。你也不能在子类中覆盖它。但是,看起来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报告的信息没有任何影响。我甚至尝试过改变先设置的状态,然后再开启事件......它依然没有任何效果。