通过点击WPF,C#来设置和更改按钮图像

本文关键字:设置 图像 按钮 WPF | 更新日期: 2023-09-27 18:12:54


我有一个类,它在一个数组中包含8个BitmapImage
Images以以下方式添加到类构造函数中:

  public SymbolCollection(string[] symbolNames)
        {
            Symbols = new BitmapImage[8];
            for (int i = 0; i < Symbols.Length; i++)
            {
                Symbols[i] = new BitmapImage();
                Symbols[i].BeginInit();
                Symbols[i].UriSource = new Uri(@"/Resources/" + symbolNames[i] + ".png", UriKind.Relative);
                Symbols[i].EndInit();
            }
        }


按钮的ImageSource设置如下:

 <Button x:Name="buttonPlayer1" HorizontalAlignment="Left" Height="80" Margin="44,387,0,0" VerticalAlignment="Top" Width="80" Click="OnPlayerSymbolClick">
            <Button.Template>
                <ControlTemplate>
                    <Image Source="{Binding Content}"/>
             </ControlTemplate>
            </Button.Template>
        </Button>

我试图在MainWindow((方法中将图像设置为按钮,并在OnPlayerSymbolClick((方法中进行更改,但图像甚至没有显示:

public MainWindow()
{   
    this.InitializeComponent();
    SetSymbolCollection();
    Uri u = symbolCollectionHolder[0].Symbols[0].UriSource;
    Debug.WriteLine(u.ToString());
    Image i = new Image();
    BitmapImage bmp = new BitmapImage();
    bmp.UriSource = u;
    i.Source = bmp;
    buttonPlayer1.Content = i;
}

private void OnPlayerSymbolClick(object sender, RoutedEventArgs e)
{
    ImageBrush imagebrush = new ImageBrush();
    imagebrush.ImageSource = symbolCollectionHolder[0].Symbols[1];
    buttonPlayer1.Background = imagebrush;
    buttonPlayer1.Content = imagebrush;
    Debug.WriteLine(buttonPlayer1.Background.ToString());
    Debug.WriteLine(imagebrush.ImageSource.ToString());
}

png-s的Build Action设置为Resource,并且项目中有一个Resources文件夹。

通过点击WPF,C#来设置和更改按钮图像

当图像资源文件要以代码隐藏的方式加载到BitmapImage中时,您应该使用资源文件包URI:

Symbols[i] = new BitmapImage(new Uri(
    "pack://application:,,,/Resources/" + symbolNames[i] + ".png"));

除此之外,当按钮的模板不使用这些属性时,设置"内容"或"背景"属性是毫无意义的。

你可能想写这样的模板:

<Button x:Name="buttonPlayer1" ...>
    <Button.Template>
         <ControlTemplate TargetType="Button">
             <Image Source="{TemplateBinding Content}"/>
         </ControlTemplate>
    </Button.Template>
</Button>

这将需要CCD_ 1(或派生对象(作为按钮的内容的值。

你可以直接通过你的一个符号:

buttonPlayer1.Content = Symbols[0];