我需要一个可以绑定到命令和点击事件的ApplicationBar(UI相关的东西需要点击事件,我无法在我的模型中处理它们。)
我正在尝试使用NuGet中的BindableApplicationBar,命令绑定工作正常,但无法获得点按事件。
请注意,我正在更改DataContext
以使绑定工作,但Tap
事件必须在代码隐藏中进行管理(我不知道这可能是我问题的主要原因!)
这是酒吧的xaml:
<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>
这是我在.xaml.cs文件中的处理程序之一:
private void Info_OnTap(object sender, GestureEventArgs e)
{
_about.Show();
Debug.WriteLine("INFO ON_TAP");
}
当我点击MenuItem
时,没有写入“INFO ON_TAP”行。
它出了什么问题?
答案 0 :(得分:0)
这不是你如何使用BindableApplicationBar。 BindableApplicationBarButton继承自FrameworkElement(因此具有Tap事件)以支持DataContext和Bindings; Tap事件没有被触发,因为没有触发BindableApplicationBarButton,屏幕上也没有BindableApplicationBarButton - 这只是一个创建ApplicationBarIconButton的包装器,但是没有将Tap事件处理程序传递给它(顺便说一句,ApplicationBarIconButton只有一个)事件 - 点击)。 BindableApplicationBarMenuItem也是如此。 BindableApplicationBar最适合命令。
在源代码的评论中查看更多内容:BindableApplicationBar @ codeplex
以下是(部分)您的选择:
答案 1 :(得分:0)
您可以尝试使用Cimbalino Toolkit AppBar ......功能更强大,更易于使用!
例如:
<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>