C# içinde Windows 8 için uygulamamı geliştiriyorum ve bir çok can sıkıcı şey, tüm metin kutuları odaklanmasına rağmen dokunmatik klavye bazen ekranda kalır olmasıdır.Windows 8 - Dokunmatik Klavye Nasıl Engellenir?
keyboard dismissal logic white paper numaralı makaleyi okudum. Bu, denetimden denetime geçiş yaparken, klavyenin bir klavye girişini kabul etmese bile açık kalabileceğini açıklar. Bu benim durumum olurdu, çünkü tüm içeriklerim GridView veya ListView'de barındırılıyor. Kullanıcı ekrandaki herhangi bir öğeye tıkladığında, bu kontrollere hafifçe dokunulur. Bu çok can sıkıcı çünkü klavye bir ekranın yarısını alıyor ve klavyeyi kapatmak için bir yol yok.
Devre dışı bırakılacak metin kutusunu ayarlamayı denedim ve etkilemedi. Klavyeyi çıkarmanın tek yolu, odağı son derece hacky olan bir düğmeye ayarlamaktır.
"AutomationPeer" ile bir şeyler yapmam gerektiğini düşündüm, ama tam olarak ne yapacağımı açıklamıyorum. Bu davranışı geçersiz kılacak bir yol var mı?
Düzenleme: Bunu çözdüm. Amaç, whitepaper'da listelenmeyen GridView ve GridView öğelerinin kontrol türüne geçmek.
public class KeyboardUnfocusableGridView : GridView
{
private class KeyboardUnfocusableGridViewAutomationPeer : GridViewAutomationPeer
{
public KeyboardUnfocusableGridViewAutomationPeer(GridView owner)
: base(owner)
{
}
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Custom;
}
}
private class KeyboardUnfocusableGridViewItemAutomationPeer : GridViewItemAutomationPeer
{
public KeyboardUnfocusableGridViewItemAutomationPeer(GridViewItem owner)
: base(owner)
{ }
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Custom;
}
}
private class KeyboardUnfocusableGridViewItem : GridViewItem
{
protected override AutomationPeer OnCreateAutomationPeer()
{
var baseItem = base.OnCreateAutomationPeer();
return new KeyboardUnfocusableGridViewItemAutomationPeer(this);
}
}
protected override AutomationPeer OnCreateAutomationPeer()
{
var baseItem = base.OnCreateAutomationPeer();
return new KeyboardUnfocusableGridViewAutomationPeer(this);
}
protected override Windows.UI.Xaml.DependencyObject GetContainerForItemOverride()
{
return new KeyboardUnfocusableGridViewItem();
}
}
O talihsiz Ben basit bir şey yapmak için bu kadar kod yazmak gerekir: İşte beni Klavyeyi kapatmak için izin yaptım ızgaranın kodudur. Kullanmam gereken ItemsControl
'un her biri için bunu yapmam gerektiğinden bu kesinlikle uygun değil.
tüm içeriğinizi bir GridView veya ListView ise, tüm yapmanız gereken IsHitTestVisible özelliğini ayarlanır yanlış ve metin kutuları odak kabul edemez, bu yüzden klavye açılır değil. Maalesef, kaydırma işlemini de kaybedersiniz. Sadece bir FYI ... –
Harika bir çözüm, bu konuda umutsuzdum :). Ve aynı teknik, ListView için de çalışır. –
Lütfen çözümünüzü cevapsız bir listeden alabilmemiz için aşağıda bir cevaba taşıyabilir misiniz? Teşekkürler. –