Immaginate la seguente semplice pagina markup:App XAML per Windows Phone 8.1. Come prevenire un cambio di messa a fuoco automatico inappropriato?
<Page
x:Class="AutoFocusBug.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<!--<Button x:Name="FocusHolder" Width="0" Height="0" MinHeight="0" MinWidth="0"/>-->
<TextBox Text="zxczczczczx"/>
<Button x:Name="Button1" Content="Button1" Click="ButtonBase_OnClick"/>
</StackPanel>
</Page>
e il seguente code-behind:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
Button1.Visibility = Visibility.Collapsed;
}
Quando clicco Button1
pulsante nasconde (che è previsto e desiderato), ma per qualche motivo TextBox
automaticamente ottiene la messa a fuoco e appare la tastiera sullo schermo. Non voglio questa messa a fuoco automatica inaspettata.
Posso provare a fare qualcosa a fuoco nel gestore Click
ma nell'app reale è implementato con ViewModel con i comandi e così via e sembra un hack sporco (e anche la tastiera appare per un breve periodo anche se cambio fuoco subito dopo pulsante nascosto).
Il secondo approccio che ho trovato è quello di creare il pulsante "invisibile" da qualche parte prima della casella di testo (commentato FocusHolder
) che è molto meglio, ma anche non sembra la tecnica corretta.
Quindi, che cos'è? È questo un meccanismo che posso in qualche modo configurare per "reindirizzare" il focus dall'elemento collassato? o è un bug? Qual è il modo giusto per evitare questo auto-focus indesiderato?
Grazie per un'altra soluzione. Il pulsante "invisibile" è ancora la soluzione migliore nel mio caso, ma è bene avere più opzioni. Non sembra che ci sia una soluzione corretta, quindi sto chiudendo la domanda. – proman