【问题标题】:How can I create a WPF style so all Image controls have a MouseDown(click) event on it?如何创建 WPF 样式,以便所有图像控件上都有 MouseDown(click) 事件?
【发布时间】:2010-01-13 00:39:21
【问题描述】:

由于 Image 控件没有 Click 事件,我使用 MouseDown 事件对其进行模拟,它的工作原理与 Click 完全一样。

这是我的风格:

 <Window.Resources>
    <Style x:Key="imageStyle" TargetType="{x:Type Image}">
        <Setter Property="RenderTransform">
            <Setter.Value>
                <ScaleTransform />
            </Setter.Value>
        </Setter>
        <Setter Property="RenderTransformOrigin" Value="0.5, 0.5" />
        <Style.Triggers>
            <EventTrigger RoutedEvent="Image.MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Duration="0:0:0.5" From="1" To="1.2" AutoReverse="True"
                                 Storyboard.TargetProperty="RenderTransform.ScaleX"/>
                        <DoubleAnimation Duration="0:0:0.2" From="1" To="1.2" AutoReverse="True" 
                                 Storyboard.TargetProperty="RenderTransform.ScaleY"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

我可以在哪里/如何创建点击事件,这样我就不必对表单上的每个图像都执行此操作:

【问题讨论】:

  • 我想我可以在路由事件中添加另一个 :“Image.MouseDown” 问题是,我不知道在这些标签中放什么。
  • 这取决于你想做什么......没有通用的答案。有些事情可以用触发器来完成,有些事情需要代码......
  • Papuccino1:EventTriggers目前只支持storyboard和sound player action,不支持任意代码;您不能扩展 TriggerAction,因为它具有内部抽象成员。

标签: c# wpf styles


【解决方案1】:

您可以使用EventSetter

<EventSetter Event="MouseClick" Handler="image_Click"/>

在代码隐藏中:

private void image_Click(object sender, MouseButtonEventArgs e)
{
    Image image = sender as Image;
    if (image != null)
    {
        // do something with the image
    }
}

【讨论】:

  • 谢谢,这正是我想要的。我知道这是像这样光滑的东西。 :3
【解决方案2】:

您可以使用 Thomas 描述的 EventSetter,或者您可以简单地在窗口级别捕获隧道 PreviewMouseLeftButtonDown 事件并检查是否单击了图像。

要使用PreviewMouseLeftButtonDown 对应用程序中的所有图像执行某些操作,只需将其添加到您的顶级Window

protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
  if(e.Source is Image)
  {
    // ... whatever you want to do when an image is clicked ...
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多