在WPF中获取图像

本文关键字:图像 获取 WPF | 更新日期: 2023-09-27 18:11:10

我有一个方法为每个球员分配六个图像,如下所示:

public void AddCards(Player one, Player two)
{
        one.Images.Add(Card1Player);
        one.Images.Add(Card2Player);
        one.Images.Add(Card3Player);
        one.Images.Add(Card4Player);
        one.Images.Add(Card5Player);
        one.Images.Add(Card6Player);
        two.Images.Add(Card1Computer);
        two.Images.Add(Card2Computer);
        two.Images.Add(Card3Computer);
        two.Images.Add(Card4Computer);
        two.Images.Add(Card5Computer);
        two.Images.Add(Card6Computer);
}

我的xaml文件包含以下图像:

<Image Name="Card1Player" HorizontalAlignment="Left" Height="97" Margin="259,249,0,0" VerticalAlignment="Top" Width="71" />
<Image Name="Card2Player" HorizontalAlignment="Left" Height="97" Margin="369,249,0,0" VerticalAlignment="Top" Width="71" />
<Image Name="Card3Player" HorizontalAlignment="Left" Height="97" Margin="158,249,0,0" VerticalAlignment="Top" Width="71" />
<Image Name="Card4Player" HorizontalAlignment="Left" Height="97" Margin="478,249,0,0" VerticalAlignment="Top" Width="71" />
<Image Name="Card5Player" HorizontalAlignment="Left" Height="97" Margin="59,249,0,0" VerticalAlignment="Top" Width="71" />
<Image Name="Card6Player" HorizontalAlignment="Left" Height="97" Margin="581,249,0,0" VerticalAlignment="Top" Width="71" />

其他六张牌也一样。

有可能用更好的方法做这件事吗?我在考虑为每六个图像创建一个父元素,然后从中获取图像。我不知道这是否可能。

我也可以把AddCards方法改成这样:

public void AddCards(Player one, Player two)
{
        one.Images.AddRange(new List<Image>() { Card1Player, Card2Player});
        two.Images.AddRange(new List<Image>() { Card1Computer, Card2Computer});
}

从xaml中获取所有图像而不指定所有这些名称将是很简洁的。这就是为什么我在考虑为这些图像创建一个容器/父容器

在WPF中获取图像

尝试把它放在Grid中,为它指定一个名称,例如PlayerImagesGrid,而不是像这样使用

    for (var i = 0; i < VisualTreeHelper.GetChildrenCount(PlayerImagesGrid); i++)
    {
        var child = VisualTreeHelper.GetChild(PlayerImagesGrid, i);
        var image = child as Image;
        if (image != null)
        {
            one.Images.Add(image);
        }
    }

它不是那么整洁,但你不必担心可扩展性。如果在其他地方不使用图像名称,也可以删除它们。