簡體   English   中英

在lostfocus事件上獲得點擊按鈕

[英]Get clicked button on lostfocus event

我有一個UWP應用程序,該應用程序具有一系列帶有單擊事件的按鈕。 我還有一個文本框,我需要將注意力集中在應用程序的幾乎每次單擊/觸摸上。 所以我像這樣設置一個resetFocus函數:

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事件發生在點擊之前,因此永遠不會觸發點擊功能。

更新:這是從按鈕創建對話框的代碼:

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&&@pp2015Gi@BoS&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);
    }

似乎您希望在單擊或點擊按鈕時按鈕不會聚焦。 如果是這樣,則可以將IsTabStop屬性設置為false以使按鈕無法接收輸入焦點。

如果IsTabStopfalse ,則該控件將從選項卡導航中排除。 此外,如果IsTabStopfalse ,則控件無法接收輸入焦點。 (如果嘗試通過編程方式設置焦點,則通過調用Focus方法, 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">

此后,按鈕將不會出現焦點,並且如果您的文本框已獲得焦點,則當用戶單擊或點擊按鈕時,它將保持焦點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM