c# - WPF - Caliburn 微事件触发器,以控制作为参数

标签 c# wpf xaml caliburn.micro caliburn

我有一个名为 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/

相关文章:

C# 删除 typeof 并仅将类名传递给函数

c# - c#中的字符串表示

c# - MVVM 中的全局异常处理

wpf - 在另一个程序集中查找合并的资源字典时出错

c# - Xamarin列表中的元素重叠

xaml - 在 VisualStateManager (WinRT XAML) 中更改 ItemTemplate 中控件的属性

c# - 将应用程序最小化到系统托盘

c# - 是否有可能为 const 提供 setter/getter ?

wpf - 为什么 ASP.NET MVC 仅限于 ASP?

c# - 在 DateTimeAxis 中定位轴标签