From here:
UI Automation is the mechanism through which developers communicate
whether or not a particular UI element can receive text input. You
must ensure that the appropriate accessibility properties are set in
your apps so that the touch keyboard will know to appear when focus
lands on a specific UI element. For Windows-provided controls, this
will be done automatically because proper accessibility properties are
set by default, but for custom controls and experiences you must do
additional work to set the accessibility properties correctly;
remember that the touch keyboard reacts to these properties.
If you use C# or C++, use an AutomationPeer object, and specifically a TextAutomationPeer. A Windows 8 Release Preview sample will
demonstrate how to do this in C#. Remember that the control must also
be editable and able to receive text to get the keyboard to invoke, in
addition to having the appropriate accessibility settings. Indicating
that something can receive text when it cannot will mislead
accessibility tools and the users who rely on them.
To enable user-driven invocation, we track the coordinates of the last
touch event and compare them to the location of the bounding rectangle
of the element that currently has focus. If the point is contained
within the bounding rectangle, the touch keyboard is invoked.
So you cannot programmatically show the keyboard. The appropriate way to hide/show the keyboard is by setting your control to accept input using an AutomationPeer object.
From here, if you set the input control to read-only then it will not trigger the keyboard, so possibly you could use that to control when the keyboard opens.
Edit:
There are a few things to check when implementing the text automation peer:
Make sure you either test with a real touch device or test using the simulator with the Basic Touch Mode tool. If you don't do this the automation peer won't activate since it is only activated by a stylus or a touch input (not mouse).
Make sure your custom control implements OnCreateAutomationPeer
something like this:
protected override AutomationPeer OnCreateAutomationPeer()
{
return new CustomControl2AutomationPeer(this);
}
- Make sure your Automation Peer implements
FrameworkElementAutomationPeer
, ITextProvider
and IValueProvider
More details found in the example here.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…