1

我需要一个可以绑定到命令和点击事件的 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.

它出什么问题了?

4

2 回答 2

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>

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

于 2013-10-23T10:04:53.320 回答
0

这不是您使用 BindableApplicationBar 的方式。BindableApplicationBarButton 继承自 FrameworkElement(因此具有 Tap 事件)以支持 DataContext 和 Bindings;Tap 事件没有被触发,因为没有 BindableApplicationBarButton 被点击过,没有 BindableApplicationBarButton 出现在屏幕上 - 这只是一个创建 ApplicationBarIconButton 的包装器,但不会将 Tap 事件处理程序传递给它(顺便说一下,ApplicationBarIconButton 只有一个事件 - 单击)。BindableApplicationBarMenuItem 也是如此。BindableApplicationBar 最适用于命令。

在源代码中的评论中查看更多信息:BindableApplicationBar @ codeplex

以下是(部分)您的选择:

  • 使用 BindableApplicationBarButton 的 Command 属性对按钮点击做出反应
  • 在 xaml 中定义 BindableApplicationBar 后,连接到它在后面的代码中创建的 ApplicationBarIconButtons 的 Click 事件
  • 使用 BindableApplicationBar 代码(开源)并更改它以获得最佳场景体验
于 2013-10-04T20:44:46.373 回答