如何访问控件模板中的元素

本文关键字:元素 控件 何访问 访问 | 更新日期: 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是在我的项目中创建的一个文件夹。

添加你的图片在那里,设置他们的构建行为为资源,这应该是所有。