我正在将一个旧的WinForms桌面应用程序移植到WPF。应用程序GUI使用WinForm的PictureBox
来显示图像。旧的WinForms应用程序还为所有PictureBox提供了OnClick
个事件处理程序。单击图像实际上做了一些重要的事情。现在我正在WPF重新执行UI,我发现this按照WinForm PictureBox
控件的等价物是WPF' Image
。但是,当我打开WPF Image
的属性面板时,没有要处理的click
事件,因此我无法像在WinForms中那样编写单击事件处理程序。
那么,您能否告诉我如何在WPF中实现相同的WinForm PictureBox
及其点击事件?我想在每次用户点击图像时显示图像并处理案例。
答案 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"/>