WPF — триггер Caliburn Micro Event с контролем в качестве параметра

У меня есть элемент управления с именем ZoomSlider, на который я хотел бы ссылаться в моем EventTrigger, вызываемом через функциональность Caliburn.Micro Message.Attach как таковой:

cal:Message.Attach="[Event PreviewMouseLeftButtonDown] = [Action ToggleNew($this, $ZoomSlider)]"

Причина в том, что я хочу затем выполнить действие с моим UserControl (в данном случае открыть его), когда возникнет событие ToggleNew, но невозможно сослаться на элемент управления в моем представлении из ViewModel.

Как я могу обратиться к элементу управления ZoomSlider из приведенного выше кода? Мой первый параметр $this работает отлично, но не может быть таким же, используя UserControl.


person touyets    schedule 01.10.2013    source источник
comment
Мой ответ сработал для вас или нет?   -  person Ibrahim Najjar    schedule 02.10.2013


Ответы (1)


Предположим, что ваш элемент управления ZoomSlider называется myZoomSlider следующим образом:

<ZoomSlider x:Name="myZoomSlider" />

Теперь вы можете попробовать две вещи, чтобы передать этот элемент управления вашему методу ToogleNew в вашей модели представления, но прежде всего вам нужно определить метод ToogleNew, чтобы он принимал элемент управления ZoomControl или любой из его супертипов в качестве параметра, что-то вроде это:

public void ToogleNew(ZoomSlider zoomSlider); // you can also pass any additional parameters if you like to

Теперь вернемся к двум методам, о которых я вам говорил:

  • Попробуйте передать управление как-то так:

    cal:Message.Attach="[Event PreviewMouseLeftButtonDown] = [Action ToggleNew(myZoomSlider)]"
    
  • Если первый вариант вам не подошел, то можете попробовать следующее:

    <ZoomSlider x:Name="myZoomSlider" />
    <Button Content="Toogle">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <cal:ActionMessage MethodName="ToogleNew">
                    <cal:Parameter Value="{Binding ElementName=myZoomSlider}" />
                </cal:ActionMessage>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Button>
    

Вы можете ознакомиться с Все о действиях. вики-документация, чтобы узнать все и вся о действиях и сообщениях о действиях.

person Ibrahim Najjar    schedule 01.10.2013
comment
Наконец-то заработало, но почему-то не получилось сделать по вашему. Мне пришлось сделать мультибиндинг для ширины. Но все же спасибо за помощь. Это пригодилось для другого фрагмента кода, который мне пришлось написать позже. - person touyets; 03.10.2013