2016-05-17 4 views
0

У меня есть приложение UWP, в котором есть серия кнопок с событием click. У меня также есть текстовое поле, в котором мне нужно сосредоточиться почти на каждом щелчке/касании приложения. Поэтому я устанавливаю функцию resetFocus следующим образом:Нажмите кнопку мыши на событии lostfocus

public void resetfocus2(object sender, RoutedEventArgs e) 
{ 
    Username.Focus(FocusState.Programmatic); 
} 

, который запускается при каждом нажатии этого текстового поля.

Это кнопка в XAML

<ListView> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Margin="4" Orientation="Vertical"> 
       <StackPanel Orientation="Horizontal"> 
        <Button Tag="{Binding id}" Grid.Column="0" Padding="0" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="100" Background="White" Click="Meal1_Click"> 
         <Image Width="100" Height="100" Source="{Binding idImg}" RelativePanel.AlignLeftWithPanel="True" /> 
        </Button> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Мой вопрос:

Как я могу вызвать функцию обычно вызвана с помощью кнопки мыши внутри этой функции?

Поскольку событие lostfocus происходит до щелчка и функция щелчка никогда не запускается.

UPDATE: Это код, который создает диалоговое окно с помощью кнопки:

public async void Meal1_Click(object sender, RoutedEventArgs e) 
    { 
     ServiziSoapClient service = new ServiziSoapClient(); 
     var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 
     var mealresponse = await service.SERVICE("PASSWORD", (sender as Button).Tag.ToString(), (string)localSettings.Values["stabilimento"]); 

     var response = JsonValue.Parse(mealresponse.Body.SERVICE).GetObject(); 

     var notnull = 0; 
     try 
     { 
      var temp = response.GetNamedArray("OPTION"); 
     } 
     catch (Exception exc) 
     { 
      Debug.WriteLine("Exception " + exc.Message); 
      notnull = 1; 
     } 

     JsonArray allergeni = null; 
     var piatto = response.GetNamedObject("OPTION2"); 
     if (notnull == 0) 
      allergeni = response.GetNamedArray("OPTION"); 

     var ingredienti = response.GetNamedString("OPTION3"); 

     var btn = sender as Button; 
     var dialog = new ContentDialog() 
     { 
      Title = piatto.GetNamedString("descr"), 
      //RequestedTheme = ElementTheme.Dark, 
      //FullSizeDesired = true, 
      MaxWidth = this.ActualWidth // Required for Mobile! 
     }; 

     // Setup Content 
     var panel = new StackPanel(); 

     var defaultImageUri = new Uri("ms-appx:///Images/ic_placeholder_primi.png"); 
     var bitmap = new BitmapImage(); 
     bitmap.ImageFailed += (s, ex) => bitmap.UriSource = defaultImageUri; 
     bitmap.UriSource = new Uri("http://test-wsmensa.sinergest.it//WS/getImage.ashx?GETIN=B&&@[email protected]&ID_IMMAGINE=" + piatto.GetNamedNumber("idImg") + "&HEIGHT=100", UriKind.Absolute); 

     panel.Children.Add(new Image 
     { 
      Height = 400, 
      Width = 400, 
      Source = bitmap 
     }); 


     panel.Children.Add(new TextBlock 
     { 
      TextWrapping = TextWrapping.Wrap, 
      FontSize = 20, 
      Text = "Ingredienti: " + ingredienti 
     }); 
     dialog.Content = panel; 

     dialog.PrimaryButtonText = "Chiudi"; 
     // Show Dialog 
     var result = await dialog.ShowAsync(); 
     UserName.Focus(FocusState.Programmatic); 
    } 
+0

Не уверен, что UWP тоже имеет это, но в регулярном WPF я просто установил 'Focusable =" False "' на кнопки. Таким образом, ваше текстовое поле никогда не должно терять фокус. –

ответ

0

Кажется, что вы хотите, чтобы кнопки не будут получать фокус при нажатии кнопки или нажмите кнопку. Если это так, вы можете установить IsTabStop property на false, чтобы кнопки не могли получать фокус ввода.

Если IsTabStop является ложным, контроль исключается из вкладок навигации. Кроме того, если IsTabStop is false, управление не может получить фокус ввода. (Если вы попытаетесь установить фокус программно, позвонив Focus, Фокус возвращает false).

Таким образом, вы можете изменить свой код XAML, как:

<Button IsTabStop="False" Tag="{Binding id}" Grid.Column="0" Padding="0" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="100" Background="White" Click="Meal1_Click"> 

После этого, кнопки не получите foucs и если ваше текстовое поле имеет фокус, он будет держать фокус, когда пользователь нажимает кнопку или нажмите на кнопки.

+0

безупречный. Именно то, что я искал! – Janinho67

Смежные вопросы