我在 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# 中访问图像以便交换它们?
最佳答案
您不能使用按钮的名称从后面的代码访问它们。为此,您需要按以下方式设置图像:
<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 是我的程序集名称。
Images 是在我的项目中创建的文件夹。
在那里添加你的图像,将它们的构建操作设置为资源,这应该是全部。
关于c# - 如何访问控件模板中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30739913/