【问题标题】:BindableApplicationBar doesn't fire tap eventsBindableApplicationBar 不会触发点击事件
【发布时间】:2013-10-02 09:03:51
【问题描述】:

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

这有什么问题?

【问题讨论】:

  • 如果你放一个断点是你的方法,你通过了吗?
  • 是的,连方法都没有调用
  • 为什么不用点击或命令?而且我认为当您点击按钮时,它不起作用,但如果您点击屏幕否则通过?

标签: c# xaml windows-phone-8 mvvm-light


【解决方案1】:

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

在源中的 cmets 中查看更多信息:BindableApplicationBar @ codeplex

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

  • 使用 BindableApplicationBarButton 的 Command 属性对按钮点击做出反应
  • 在 xaml 中定义 BindableApplicationBar 后,连接到它在 后面的代码中创建的 ApplicationBarIconButtons 的 Click 事件
  • 使用 BindableApplicationBar 代码(开源)并对其进行修改,以获得最佳场景体验

【讨论】:

    【解决方案2】:

    您可以尝试 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

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2013-05-19
      • 2015-12-19
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多