我在WPF中为我的图像需要Click事件,我在XAML中将它们定义为:
<Button Click="Button_Click" Name="B1" x:Uid="7">
<Button.Template>
<ControlTemplate>
<Image Source="E:\Photos\Me\DSC_0002.jpg" Name="im1" />
</ControlTemplate>
</Button.Template>
</Button>
我有7个像这样声明的图像,每个图像都在一个单独的Button标签中。
我为所有按钮分配了一个常用的Click功能,在C#中我有一个名为clickCount
的变量来跟踪点击次数。
现在我想在用户点击它们时交换任意2个图像的位置。
如何在C#中访问图像以便我可以交换它们?
答案 0 :(得分:3)
您无法使用按钮名称从后面的代码访问它们。为此,您需要按以下方式设置图像:
<Image Source="{Binding ImagePath}"
HorizontalAlignment="Left"
Stretch="Fill"
VerticalAlignment="Bottom"
Width="200"/>
这样您就可以在模型中定义图像。
public class Model : INotifyPropertyChanged
{
private Uri _ImagePath;
public Uri ImagePath
{
get
{
return _ImagePath;
}
set
{
_ImagePath = value;
PropertyChanged(this, new PropertyChangedEventArgs("ImagePath"));
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
}
我不确定您是否需要使用MVVM来更改具有Button Click事件的图像,但对于此背后的代码是其中一种方式:
public partial class MainWindow : Window
{
public Model ImageModel { get; set; }
public MainWindow()
{
InitializeComponent();
ImageModel = new Model();
ImageModel.ImagePath = new Uri(@"/ImageSource;component/Images/Image1.jpg", UriKind.RelativeOrAbsolute);
this.DataContext = ImageModel;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ImageModel.ImagePath = new Uri(@"/ImageSource;component/Images/Image2.jpg", UriKind.RelativeOrAbsolute);
}
}
这是解决此问题的最简单,最快捷的方法。如果你需要MVVM只需举手,我们就可以得到一个Command而不是那个Click事件。
还有一件事,你有一个图像列表吗?如果是这样,我们将不得不使用ObservableCollection<Model>
并实例化许多模型,以便为所有按钮提供信息。
还有一件事:
ImageSource是我的程序集名称。
图片是在我的项目中创建的文件夹。
在那里添加你的图片,将他们的Build Action设置为Resource,这应该是全部。