2

我有一个名为的控件ZoomSlider,我想EventTrigger通过 Caliburn.MicroMessage.Attach功能在我的调用中引用它:

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

原因是,当我的事件引发时,我想对我的UserControl (在这种情况下,滑动它打开)ToggleNew采取行动,但不可能从 ViewModel 引用我的视图中的控件。

如何ZoomSlider从上面的代码中引用控件?我的第一个参数$this可以完美运行,但不能使用UserControl.

4

1 回答 1

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

现在回到我告诉你的两种方法:

  • 尝试像这样传递控件:

    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 wiki 文档以了解有关操作和操作消息的所有内容。

于 2013-10-01T13:13:56.347 回答