BindableApplicationBar tidak mengaktifkan peristiwa tap

Saya memerlukan ApplicationBar yang dapat diikat ke perintah dan acara tap (acara tap diperlukan untuk hal-hal terkait UI dan saya tidak bisa menanganinya di Model saya).

Saya mencoba dengan BindableApplicationBar dari NuGet dan pengikatan perintah berfungsi dengan baik tetapi tidak ada cara untuk mendapatkan acara tap.

Harap dicatat bahwa saya mengubah DataContext agar pengikatan berfungsi tetapi acara Tap harus dikelola di belakang kode (dan saya tidak tahu apakah ini mungkin penyebab utama masalah saya!)

Inilah xaml bilahnya:

<bindableApplicationBar:Bindable.ApplicationBar>
    <bindableApplicationBar:BindableApplicationBar>
        <bindableApplicationBar:BindableApplicationBarButton
            Text="{Binding MainSearchText}"
            IconUri="Assets/AppBar/feature.search.png"
            Command="{Binding NavigateCommand}"
            Name="SearchBarButton" />
        <bindableApplicationBar:BindableApplicationBarButton
            Text="{Binding Path=LocalizedResources.AppBarSettingsText, Source={StaticResource LocalizedStrings}}"
            IconUri="Assets/AppBar/feature.settings.png"
            Tap="SettingsButton_OnTap" />
        <bindableApplicationBar:BindableApplicationBar.MenuItems>
            <bindableApplicationBar:BindableApplicationBarMenuItem
                Text="{Binding Path=LocalizedResources.AppBarAboutText, Source={StaticResource LocalizedStrings}}"
                Tap="Info_OnTap" />
        </bindableApplicationBar:BindableApplicationBar.MenuItems>
    </bindableApplicationBar:BindableApplicationBar>
</bindableApplicationBar:Bindable.ApplicationBar>

dan inilah salah satu penangan yang saya miliki di file .xaml.cs saya:

private void Info_OnTap(object sender, GestureEventArgs e)
{
    _about.Show();
    Debug.WriteLine("INFO ON_TAP");
}

Tidak ada baris "INFO ON_TAP" yang tertulis ketika saya mengklik MenuItem.

Apakah ada yang salah?


person StepTNT    schedule 02.10.2013    source sumber
comment
Jika Anda menetapkan breakpoint adalah metode Anda, Anda lulus?   -  person MatDev8    schedule 03.10.2013
comment
Ya, metode ini bahkan tidak dipanggil   -  person StepTNT    schedule 03.10.2013
comment
Mengapa Anda tidak menggunakan klik atau perintah? Dan menurut saya ketika Anda mengetuk tombol, itu tidak berfungsi tetapi lolos jika Anda mengetuk layar bukan?   -  person MatDev8    schedule 03.10.2013


Jawaban (2)


Ini bukan cara Anda menggunakan BindableApplicationBar. BindableApplicationBarButton mewarisi dari FrameworkElement (dan karenanya memiliki acara Tap) untuk mendukung DataContext dan Bindings; acara Tap tidak diaktifkan karena tidak ada BindableApplicationBarButton yang pernah disadap, tidak ada BindableApplicationBarButton yang pernah ada di layar - ini hanya pembungkus yang membuat ApplicationBarIconButton, tetapi tidak meneruskan event handler Tap ke dalamnya (Omong-omong, ApplicationBarIconButton hanya memiliki satu acara - Klik). Hal yang sama berlaku untuk BindableApplicationBarMenuItem. BindableApplicationBar berfungsi paling baik dengan Perintah.

Lihat selengkapnya di komentar di sumber: BindableApplicationBar @ codeplex

Berikut (beberapa) pilihan Anda:

  • gunakan properti Command dari BindableApplicationBarButton untuk bereaksi terhadap klik tombol
  • setelah mendefinisikan BindableApplicationBar di xaml, sambungkan ke peristiwa Click dari ApplicationBarIconButtons yang dibuat dalam kode di belakang
  • gunakan kode BindableApplicationBar (sumber terbuka) dan ubah untuk pengalaman terbaik dalam pemandangan Anda
person lisp    schedule 04.10.2013

Anda dapat mencoba Cimbalino Toolkit AppBar ... jauh lebih kuat dan lebih mudah digunakan!

Misalnya:

 <i:Interaction.Behaviors>
        <cimbalinoBehaviors:MultiApplicationBarBehavior 
            SelectedIndex="{Binding SelectedIndex, ElementName=MainInfo, Converter={StaticResource HomeMenuConverter}}" >

            <cimbalinoBehaviors:ApplicationBar Opacity="0.5"  
                                               IsMenuEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}">


                <cimbalinoBehaviors:ApplicationBarIconButton 
                    IsVisible="{Binding IsAuthenticated}"
                    IsEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}"
                    Command="{Binding GetFavorites, Mode=OneTime}" 
                    IconUri="/Assets/appbar.sync.rest.png" Text="{Binding Labels.Translation.Refresh, Source={StaticResource LabelsManager}}" />
                <cimbalinoBehaviors:ApplicationBarIconButton 
                    IsVisible="{Binding SelectionMode, Converter={StaticResource NegativeBooleanConverter}}"
                    IsEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}"
                    Command="{Binding SetSelectionMode, Mode=OneTime}" 
                    IconUri="/Assets/ApplicationBar.Select.png" Text="{Binding Labels.Translation.Select, Source={StaticResource LabelsManager}}" />
                <cimbalinoBehaviors:ApplicationBarIconButton 
                    IsVisible="{Binding SelectionMode}"
                    IsEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}"
                    Command="{Binding DeleteFavorites, Mode=OneTime}" 
                    IconUri="/Assets/ApplicationBar.Delete.png" Text="{Binding Labels.Translation.Delete, Source={StaticResource LabelsManager}}" />

                <cimbalinoBehaviors:ApplicationBarIconButton 
                    IsVisible="{Binding SelectionMode}"
                    IsEnabled="{Binding IsLoading, Converter={StaticResource NegativeBooleanConverter}}"
                    Command="{Binding SetSelectionMode, Mode=OneTime}" 
                    IconUri="/Assets/ApplicationBar.Cancel.png" Text="{Binding Labels.Translation.Cancel, Source={StaticResource LabelsManager}}" />

            </cimbalinoBehaviors:ApplicationBar>
        </cimbalinoBehaviors:MultiApplicationBarBehavior>
    </i:Interaction.Behaviors>

https://github.com/Cimbalino/Cimbalino-Phone-Toolkit

person Cristovao Morgado    schedule 23.10.2013