【问题标题】:WPF - Caliburn Micro Event trigger with control as parameterWPF - 以控制为参数的 Caliburn 微事件触发器
【发布时间】:2013-10-01 10:25:39
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我的回答对你有用吗?

标签: c# wpf xaml caliburn.micro caliburn


【解决方案1】:

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

【讨论】:

  • 终于让它工作了,但由于某种原因我无法通过你的方式做到这一点。我必须为宽度做一个多重绑定。但是感谢您的帮助。它对我稍后必须编写的另一段代码很有用
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多