单击“WPF图像的事件”

时间:2015-05-11 17:42:02

标签: c# .net wpf winforms events

我正在将一个旧的WinForms桌面应用程序移植到WPF。应用程序GUI使用WinForm的PictureBox来显示图像。旧的WinForms应用程序还为所有PictureBox提供了OnClick个事件处理程序。单击图像实际上做了一些重要的事情。现在我正在WPF重新执行UI,我发现this按照WinForm PictureBox控件的等价物是WPF' Image。但是,当我打开WPF Image的属性面板时,没有要处理的click事件,因此我无法像在WinForms中那样编写单击事件处理程序。

那么,您能否告诉我如何在WPF中实现相同的WinForm PictureBox及其点击事件?我想在每次用户点击图像时显示图像并处理案例。

4 个答案:

答案 0 :(得分:16)

只需将MouseDown事件添加到您的图片中就像这样

<Image x:Name=aPicture Source="mypic.jpg" MouseDown="aPicture_MouseDown"/>

应该将此添加到

后面的代码中
private void aPicture_MouseDown(object sender, MouseEventArgs e)
{
   //do something here
}

答案 1 :(得分:9)

在WPF中,每个控件都有其默认模板(它的外观),但您可以轻松更改这些模板并使控件看起来像您想要的那样。这样可以更轻松地通过其功能选择控件并使其看起来像您想要的那样。如果您需要Click,请选择Button并更改其Template

<Window ...>
    <Window.Resources>
        <Style TargetType="{x:Type Button}" x:Key="ImageButtonStyle">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <ContentPresenter/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <Button Style="{StaticResource ImageButtonStyle}" Click="ImageButton_Click">
        <Image Source="..."/>
    </Button>
</Window>

上述XAML Image将是您的Button

修改

下面你可以找到如何绑定/更改Image.Source的简化版本,其中所有内容都在MainWindow中完成,但基本上在WPF中你不操纵控件但是使用Binding绑定它们的属性并进行操作这些属性。通常,您将创建专用类(ViewModel)。你的类需要实现INofityPropertyChanged接口,需要相应地设置DataContext并且绑定属性需要在每次更改其值时引发INofityPropertyChanged.PropertyChanged事件(这就是你如何通知UI刷新价值)

public partial class MainWindow : Window, INotifyPropertyChanged
{
   public MainWindow()
   {
      InitializeComponent();
      DataContext = this;
   }

   private ImageSource _myImageSource;

   public ImageSource MyImageSource
   {
      get { return _myImageSource; }
      set
      {
          _myImageSource = value;
          OnPropertyChanged("MyImageSource");
      }
   }

   private void ImageButton_Click(object sender, RoutedEventArgs e)
   {
       this.MyImageSource = new BitmapImage(...); //you change source of the Image
   }

   public event PropertyChangedEventHandler PropertyChanged;

   private void OnPropertyChanged(string propertyName)
   {
      var handler = PropertyChanged;
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
   }    
}

并在XAML中:

<Button Style="{StaticResource ImageButtonStyle}" Click="ImageButton_Click" Width="..." Height="...">
    <Image Source="{Binding MyImageSource}"/>
</Button>

答案 2 :(得分:1)

也许 MouseLeftButtonDown 会更合适。

答案 3 :(得分:1)

为获得完整的可点击体验,我建议使用Cursor属性设置为Hand的CJK方法。

<Image x:Name="btnSearch" Source="/Images/search/search.png" MouseDown="btnSearch_MouseDown" Cursor="Hand"/>