Creating a clickable image in WPF
Asked Answered
F

5

21

I want to make a user control that shows an image and can invoke a command when clicked. Later I want to bind a list of these controls to a list of products.

Fractocumulus answered 27/4, 2010 at 10:43 Comment(0)
C
57

Try this very straight forward approach

<Grid>
        <Button Height="50" Width="50">
            <Button.Template>
                <ControlTemplate>
                    <Image Source="yourimage.png"/>
                </ControlTemplate>
            </Button.Template>
        </Button>

    </Grid>

private void Button_Click(object sender, RoutedEventArgs e)
        {
           // do smt
        }
Cervantez answered 6/2, 2014 at 8:3 Comment(4)
This was the most straight forward approach I've seen without having to override all the visual styles for the button.Daiquiri
I've gone with this approach, but reusability goes out the window, since you're effectively hard-coding in the image name. But, it fits my needs.Khotan
@Daiquiri see my answer then.A1
ok but no hover image ? it does not act as a real button hereCheyennecheyne
F
8

Well, after a little more fiddling, a simple button does the job. Here it is:

<Button Command="{Binding Path=DisplayProductCommand}" >
   <Image Source="..\Images\my-beautiful-product.jpg"/>
</Button>
Fractocumulus answered 27/4, 2010 at 15:47 Comment(1)
This is not a clickable image, this is a button with an image inside it. I'm baffled that this is marked as the accepted answer. This should be the accepted answer.Luckett
A
5
   <Image Name="imageFoo" Source="/AppFoo;component/Foo.png" Width="32" Cursor="Hand" MouseUp="imageFoo_MouseUp"/>

    private void imageFoo_MouseUp(object sender, MouseButtonEventArgs e)
    {
        //Do something
    }
Alarmist answered 28/11, 2010 at 16:57 Comment(1)
Sorry, mico, for not completely understanding your requirement. Let me leave my answer there just in case anyone needs a quick way to have a clickable image.Alarmist
M
4

There are several ways to do this, but one simple solution would be to use a button (maybe style away the border and background), and use the image as the content of the button.

You can later use a ListBox or similar, and override the DataTemplate to use the button and an image for each product.

Muzz answered 27/4, 2010 at 10:46 Comment(1)
This is in fact the first route I was taking, but I am wondering if there is a cleaner solution.Fractocumulus
A
1

I don't know about you guys but PreviewMouseDown and TouchUp worked completely fine along with my binding:

<Image x:Name="bla" Source="{Binding blabla}" ... TouchDown="bla_TouchDown" PreviewMouseDown="bla_PreviewMouseDown">

I am using VS 2015

A1 answered 6/7, 2016 at 14:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.