EventTrigger в Xaml - PullRequest
       16

EventTrigger в Xaml

0 голосов
/ 24 августа 2011

Я пытаюсь добавить триггер событий в свой стиль, но по какой-то причине он не работает.Это приводит меня к ошибке {"Значение не может быть нулевым. \ R \ nИмя параметра: routedEvent"} Моя цель состоит в том, чтобы добавить логику исправления моего элемента управления в событие KeyDown, у кого-нибудь есть идеи о том, что происходит?

Следующий стиль внутри моего Theme.xaml.

    <Style.Triggers>
            <EventTrigger>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="KeyDown">
                    <Behaviors:ExecuteCommandAction Command="{Binding TabKeyDownCommand}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </EventTrigger>
    </Style.Triggers>

Вот мой класс ExecuteCommandAction:

/// <summary>
/// Behaviour helps to bind any RoutedEvent of UIElement to Command.
/// </summary>
[DefaultTrigger(typeof (UIElement), typeof (EventTrigger), "KeyDown")]
public class ExecuteCommandAction : TargetedTriggerAction<UIElement>
{
    /// <summary>
    /// Dependency property represents the Command of the behaviour.
    /// </summary>
    public static readonly DependencyProperty CommandParameterProperty =
        DependencyProperty.RegisterAttached("CommandParameter",
                                            typeof (object),
                                            typeof (ExecuteCommandAction),
                                            new FrameworkPropertyMetadata(null));

    /// <summary>
    /// Dependency property represents the Command parameter of the behaviour.
    /// </summary>
    public static readonly DependencyProperty CommandProperty = DependencyProperty.RegisterAttached("Command",
                                                                                                    typeof (ICommand
                                                                                                        ),
                                                                                                    typeof (
                                                                                                        ExecuteCommandAction
                                                                                                        ),
                                                                                                    new FrameworkPropertyMetadata
                                                                                                        (null));

    /// <summary>
    /// Gets or sets the Commmand.
    /// </summary>
    public ICommand Command
    {
        get { return (ICommand) GetValue(CommandProperty); }
        set { SetValue(CommandProperty, value); }
    }

    /// <summary>
    /// Gets or sets the CommandParameter.
    /// </summary>
    public object CommandParameter
    {
        get { return GetValue(CommandParameterProperty); }
        set { SetValue(CommandParameterProperty, value); }
    }


    /// <summary>
    /// Invokes the action.
    /// </summary>
    /// <param name="parameter">The parameter to the action. If the action does not require a parameter, the parameter may be set to a null reference.</param>
    protected override void Invoke(object parameter)
    {
        if (Command != null)
        {
            if (Command.CanExecute(CommandParameter))
            {
                Command.Execute(CommandParameter);
            }
        }
    }
}

1 Ответ

2 голосов
/ 24 августа 2011
Функцию

Interactivity нельзя использовать подобным образом, она не относится к обычным Triggers, EventTriggers или даже к самим стилям.Вы можете использовать его на таких элементах, как это:

<Button>
    <i:Interaction.Triggers>
         <!-- ... -->
    </i:Interaction.Triggers>
</Button>

Ошибка вызвана тем, что RoutedEvent не установлен на охватывающем EventTrigger, но даже если вы его установили, будут появляться новые ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...