我有一个名为 ZoomSlider
的控件,我想在通过 Caliburn.Micro Message.Attach
功能调用的 EventTrigger
中引用该控件,如下所示例如:
cal:Message.Attach="[Event PreviewMouseLeftButtonDown] = [Action ToggleNew($this, $ZoomSlider)]"
原因是,当我的 ToggleNew
事件发生时,我希望对我的 UserControl
采取行动(在本例中,将其滑开)被引发,但不可能从 ViewModel 引用我的 View 中的控件。
如何从上面的代码中引用 ZoomSlider
控件?我的第一个参数 $this
工作完美,但使用 UserControl
无法获得相同的效果。
最佳答案
假设您的 ZoomSlider
控件名为 myZoomSlider
,如下所示:
<ZoomSlider x:Name="myZoomSlider" />
现在您可以尝试两种方法将此控件传递给 View 模型上的 ToogleNew
方法,但首先您需要定义方法 ToogleNew
以便它采用 ZoomControl
控件或其任何父类(super class)型作为参数,如下所示:
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 文档来了解有关操作和操作消息的所有内容。
关于c# - WPF - Caliburn 微事件触发器,以控制作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19113825/