如何在WPF中的多个按钮中显示不同的背景

时间:2012-01-07 20:48:52

标签: c# wpf xaml button

我需要显示多个按钮,但每个按钮必须具有与其他按钮不同的背景,我一直在努力,但我只需要显示多个按钮但具有相同的背景。 这是XAML:

<Window x:Class="apple.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="370" Width="525">
    <Grid>
        <Image Source="C:\Users\Public\Pictures\Sample Pictures\Koala.jpg" Stretch="Fill"/>
        <DockPanel Name="dock">
            <UniformGrid Name="gridx" DockPanel.Dock="Top" Rows="3" Columns="3" Height="334"> 
            </UniformGrid>
        </DockPanel>
    </Grid>
</Window>

此外,这是C#代码:

namespace apple
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            masterGUI();
        }

    public void masterGUI()
    {
        ImageBrush ib = new ImageBrush();
        IconImage[] ico = null;
        Bitmap[] img = null;
        string[] list = null;
        string[] link = Directory.GetFiles(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs", "*.lnk", SearchOption.AllDirectories);
        list = new string[link.Length];
        ico = new Icon[link.Length];
        img = new Bitmap[link.Length];
        for (int n = 0; n < link.Length; n++)
        {
            System.Windows.Controls.Button newBtn = new Button();
            list[n] = System.IO.Path.GetFileNameWithoutExtension(link[n]);
            FileToImageIconConverter some = new FileToImageIconConverter(link[n]);
            ImageSource imgSource = some.Icon;
            ib.ImageSource = imgSource;
            newBtn.Background = ib;
            newBtn.Content = list[n];
            gridx.Children.Add(newBtn);
        }  
    }
}

}

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

需要在每个项目的for循环中创建ImageBrush。否则,每个项目的背景都会相同。

此外,您正在接近这种“错误”的方式,在WPF中,您应该使用data bindingdata templating来进行此类操作,而不是使用命令式循环。