Условное выполнение EventTriggers в Silverlight 3 - PullRequest
0 голосов
/ 21 апреля 2010

В настоящее время я работаю над пользовательским интерфейсом приложения Silverlight и должен иметь возможность изменять визуальное состояние элемента управления на одно из двух возможных состояний на основе его текущего состояния при обработке одного и того же триггера события.

Например: у меня есть элемент управления, который частично находится в обтравочном контуре, когда я щелкаю видимую часть элемента управления, я хочу изменить состояние на «видимое», и если я щелкаю его снова, когда оно находится в его «видимом»Я хочу изменить состояние на «скрытое».

Пример XAML:

            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonUp">
                    <ic:GoToStateAction StateName="Visible"/>
                    <ic:GoToStateAction StateName="Hidden"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>

Где «i» - это «System.Windows.Interactivity; сборка = System.Windows.Interactivity».и "ic" - это "Microsoft.Expression.Interactivity.Core; Assembly = Microsoft.Expression.Interactions".В настоящее время я работаю в Expression Blend 3 и предпочел бы иметь решение только для XAML, но не против кодирования этого, если это абсолютно необходимо.Я попытался записать изменение имени целевого состояния в Blend, но это не сработало.

Есть мысли по этому поводу?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2010

Если у вас есть только 2 состояния, проще всего вызвать GoToNextState для поворота между состояниями. E.g.:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonUp">
        <si:GoToNextState/>
    </i:EventTrigger>
</i:Interaction.Triggers>

Если у вас есть и другие состояния, то:

  • добавить свойство в базовую модель представления IsVisible
  • имеет триггер, который будет вызывать метод (с использованием действия CallMethod), который будет переключать это свойство om MouseLeftButtonUp
  • имеет DataStateBehavior привязанное к IsVisible свойству

например. как то так:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonUp">
        <si:CallDataMethod Method='ToggleIsVisible'/>
    </i:EventTrigger>
</i:Interaction.Triggers>
<i:Interaction.Behaviors>
    <si:DataStateBehavior Binding='{Binding IsVisible}' Value='True' TrueState='Visible' FalseState='Hidden'/>
</i:Interaction.Behaviors>
0 голосов
/ 19 мая 2010

В конце концов я достиг этого, создав простое настраиваемое действие под названием ToggleStateAction, которое инкапсулирует это поведение для меня.

...