2013-10-01 28 views
2

我有一個名爲控制其ZoomSlider我想通過Caliburn.Micro Message.Attach功能稱爲這樣我EventTrigger參考:WPF - 卡利微事件觸發和控制爲參數

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

的原因是然後我想對我的UserControl(在這種情況下,將其滑動打開)採取行動當我的ToggleNew事件引發時,但無法在ViewModel的View中引用控件。

如何從上面的代碼中引用ZoomSlider控件?我的第一個參數$this完美,但不能使用UserControl

+0

我的答案是否適合您? –

回答

3

讓我們假設你的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 

現在又回到了兩種方法,我告訴你AB出:

  • 嘗試通過控制,是這樣的:

    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> 
    

您可以查看All about actions維基文檔以瞭解有關操作和事件的所有信息動作消息。

+0

終於讓它工作了,但由於某種原因,我無法通過你的方式做到這一點。我不得不爲寬度做多重綁定。但感謝您的幫助。它適用於我以後需要寫的另一段代碼 – touyets

+0

@touyets歡迎您,很高興我能提供幫助。 –