gpt4 book ai didi

xaml - 在 GridView 项目上单击鼠标右键显示 AppBar

转载 作者:行者123 更新时间:2023-12-04 05:34:59 25 4
gpt4 key购买 nike

在 WinRT 应用程序中,当您右键单击 ListBoxItem 时,将显示 AppBar。但是当您右键单击 GridViewItem 时,AppBar 不会出现。这个可以配置吗?

如果不是,最好使用 ListBox 而不是 GridView 并自定义模板。或者我应该使用 RightTapped 命令来实现它。
(我使用 MVVM Light,因为 Caliburn.Micro 目前不工作)

RightTappedCommand 示例:



public sealed class RightTapped
{
#region Properties

#region Command

///
/// GetCommand
///
///
///
public static ICommand GetCommand(DependencyObject obj)
{
return (ICommand)obj.GetValue(CommandProperty);
}

///
/// SetCommand
///
///
///
public static void SetCommand(DependencyObject obj, ICommand value)
{
obj.SetValue(CommandProperty, value);
}

///
/// DependencyProperty CommandProperty
///
public static readonly DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(RightTapped), new PropertyMetadata(null, OnCommandChanged));

#endregion Command

#region CommandParameter

///
/// GetCommandParameter
///
///
///
public static object GetCommandParameter(DependencyObject obj)
{
return (object)obj.GetValue(CommandParameterProperty);
}

///
/// SetCommandParameter
///
///
///
public static void SetCommandParameter(DependencyObject obj, object value)
{
obj.SetValue(CommandParameterProperty, value);
}

///
/// DependencyProperty CommandParameterProperty
///
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.RegisterAttached("CommandParameter", typeof(object), typeof(RightTapped), new PropertyMetadata(null, OnCommandParameterChanged));

#endregion CommandParameter

#region HasCommandParameter

private static bool GetHasCommandParameter(DependencyObject obj)
{
return (bool)obj.GetValue(HasCommandParameterProperty);
}

private static void SetHasCommandParameter(DependencyObject obj, bool value)
{
obj.SetValue(HasCommandParameterProperty, value);
}

private static readonly DependencyProperty HasCommandParameterProperty =
DependencyProperty.RegisterAttached("HasCommandParameter", typeof(bool), typeof(RightTapped), new PropertyMetadata(false));

#endregion HasCommandParameter

#endregion Propreties

#region Event Handling

private static void OnCommandParameterChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
SetHasCommandParameter(o, true);
}

private static void OnCommandChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
var element = o as FrameworkElement;
if (element != null)
{
if (e.NewValue == null)
{
element.RightTapped -= FrameworkElementKeyUp;
}
else if (e.OldValue == null)
{
element.RightTapped += FrameworkElementKeyUp;
}
}
}

private static void FrameworkElementKeyUp(object sender, RightTappedRoutedEventArgs e)
{
var o = sender as DependencyObject;
var command = GetCommand(sender as DependencyObject);

var element = e.OriginalSource as FrameworkElement;
if (element != null)
{
// If the command argument has been explicitly set (even to NULL)
if (GetHasCommandParameter(o))
{
var commandParameter = GetCommandParameter(o);

// Execute the command
if (command.CanExecute(commandParameter))
{
command.Execute(commandParameter);
}
}
else if (command.CanExecute(element.DataContext))
{
command.Execute(element.DataContext);
}
}
}

#endregion
}

在 Xaml 中,是这样的:
common:Tapped.Command="{Binding ShowAppBar}"

最佳答案

你可以只做 myAppBar.IsOpen = true。

关于xaml - 在 GridView 项目上单击鼠标右键显示 AppBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com