Как создать стиль WPF, чтобы на всех элементах управления изображением было событие MouseDown (щелчок)? - PullRequest
3 голосов
/ 13 января 2010

Поскольку элемент управления 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>

Где и как я могу создать событие клика, чтобы мне не приходилось делать это для КАЖДОГО ОДНОГО ИЗОБРАЖЕНИЯ в моей форме:

Ответы [ 2 ]

6 голосов
/ 13 января 2010

Вы можете использовать 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
    }
}
0 голосов
/ 13 января 2010

Вы можете использовать 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 ...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...