EventSetter для не маршрутизированного события? - PullRequest
6 голосов
/ 02 ноября 2011

У меня есть Label, для которого я пытаюсь изменить событие MouseDown, если пользователь вошел в систему или нет, используя Trigger.

<Label x:Name="lblSave" MouseDown="lblSave_MouseDown" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" ToolTip="Save Files"  Width="25" Height="25" Margin="0, 0, 5, 0"  >
<Label.Style>
    <Style TargetType="{x:Type Label}">
        <Setter Property="Background" Value="{DynamicResource ResourceKey=saveIcon}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Source={x:Static sec:Security.Instance}, Path=IsLoggedIn}" Value="False">
                <Setter Property="Background" Value="{DynamicResource ResourceKey=readonlyIcon}" />
                <EventSetter Event="MouseDown" Handler="lblNoAccess_MouseDown" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Label.Style>

Но, в отличие от этого сообщения, то, что у меня есть, не будет работать, потому что MouseDown не является перенаправленным событием.Я все еще получаю ошибку System.Windows.EventSetter.Event: {"Value cannot be null.\r\nParameter name: value"}.

Итак, мой вопрос, есть ли способ использовать триггер для установки событий без маршрутизации?

Ответы [ 2 ]

7 голосов
/ 02 ноября 2011

Из документации :

Обратите внимание, что только Style.Setters поддерживает объекты EventSetter. Триггеры (TriggerBase и производные классы) не поддерживают EventSetter.

(Также, как отмечено в комментарии, MouseDown маршрутизируется.)

0 голосов
/ 02 ноября 2011

Как H.B. сказал, что вы не можете использовать EventSetter в коллекции Triggers, вы должны проверить в обработчике событий, зарегистрирован он или нет, и выполнить правильный код, разве это решение не работает для вас?

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