如何访问控件模板中的元素
本文关键字:元素 控件 何访问 访问 | 更新日期: 2023-09-27 17:54:35
我需要点击事件为我的图像在WPF中,我定义他们像这样在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
的变量来跟踪点击次数。现在我想在用户点击任意两个图像时交换它们的位置。
我如何在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来改变图像与按钮点击事件,但对于背后的代码这是一种方式:
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,请举手,我们可以得到一个命令,而不是点击事件。还有一件事,你有图片列表吗?如果是这样,我们将不得不使用ObservableCollection<Model>
并实例化许多模型,以提供所有的按钮。
还有一点:
ImageSource是我的程序集名称。
Images是在我的项目中创建的一个文件夹。
添加你的图片在那里,设置他们的构建行为为资源,这应该是所有。