WPF - 卡利本微事件触发器,控件作为参数

本文关键字:控件 参数 触发器 事件 WPF | 更新日期: 2023-09-27 18:33:36

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

cal:Message.Attach="[Event PreviewMouseLeftButtonDown] = [Action ToggleNew($this, $ZoomSlider)]"
原因是,当引发

ToggleNew事件时,我想对我的UserControl执行操作(在本例中,将其滑动打开),但无法从 ViewModel 引用我的视图中的控件。

如何从上面的代码中引用ZoomSlider控件?我的第一个参数$this工作正常,但使用 UserControl 无法具有相同的参数。

WPF - 卡利本微事件触发器,控件作为参数

假设您的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>
    

您可以查看所有关于操作 wiki 文档,了解有关操作和操作消息的所有内容。