将按钮集合链接到标签集合



我正在读取XML文件并使用它来填充WPF表单。XML文件中的每个条目用于创建一个按钮和一个标签。

我遇到的问题是将按钮与标签相关联:

下面是我的代码:
// Loop through Backups
foreach (var back in backups)
{
    // Create Wrap Panel
    myWrapPanel = new WrapPanel();
    //myWrapPanel.Background = System.Windows.Media.Brushes.Red;
    myWrapPanel.Orientation = System.Windows.Controls.Orientation.Horizontal;
    myWrapPanel.Width = 600;
    myWrapPanel.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
    myWrapPanel.VerticalAlignment = System.Windows.VerticalAlignment.Top;
    // **************************************
    // Add Controls to Wrap Panel
    // **************************************
    // Backup Source
    System.Windows.Controls.Button btnBackupSource = new System.Windows.Controls.Button();
    btnBackupSource.Content = "Source";
    btnBackupSource.Height = 25;
    btnBackupSource.Width = 75;
    btnBackupSource.Click += btnBackupSource_Click;
    btnBackupSource.Name = "btnBackupSource";
    myWrapPanel.Children.Add(btnBackupSource);
    System.Windows.Controls.Label lblBackupSource = new System.Windows.Controls.Label();
    lblBackupSource.Height = 25;
    lblBackupSource.Width = 461;
    lblBackupSource.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
    lblBackupSource.VerticalAlignment = System.Windows.VerticalAlignment.Top;
    lblBackupSource.Name = "lblBackupSource";
    lblBackupSource.Content = "";
    myWrapPanel.Children.Add(lblBackupSource);

按钮和标签创建OK,但我正在努力将它们相互关联。例如,当一个按钮被按下时,结果需要出现在与该按钮相关联的单个标签中。

任何关于如何进行的建议将是非常欢迎的!

我目前得到的是每个按钮更新一个标签:

private void btnBackupSource_Click(object sender, RoutedEventArgs e)
    {
        SourceFolderBrowser = new System.Windows.Forms.FolderBrowserDialog();
        // Allow users to creating new folders and default to the my documents folder.
        SourceFolderBrowser.ShowNewFolderButton = true;
        SourceFolderBrowser.RootFolder = Environment.SpecialFolder.Personal;
        SourceFolderBrowser.ShowDialog();
        label2.Content = SourceFolderBrowser.SelectedPath;
    }

然而,我想做的是让每个按钮更新其相关的标签。

我的建议是:

在按钮的Tag属性中存储您想要与按钮关联的标签,如下所示:

btnBackupSource.Tag = lblBackupSource;

之后当你要在连接的btnBackupSource_Click中做一些事情时,你可以这样做:

var button = sender as Button;
var label = button.Tag as Label;
label.Text = "Hello";

通过创建DataTemplate并设置ListBox,这将容易得多。

这样,您就不必在代码中创建所有控件,并且只需要将按钮和标签连接一次(最好是通过数据绑定)。

<Window.Resources>
    <DataTemplate x:Key="backupView">
        <StackPanel Orientation="Horizontal">
            <Label Content="{Binding BackupName}"/>
            <Button Content="Source" Command="{Binding DoSomethingCommand}" />
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<ListBox ItemsSource="{Binding}" ItemTemplate="{StaticResource backupView}"/>

在代码中,你需要创建一个类(备份?)与属性名称和DoSomethingCommand。该命令将修改备份的名称,该名称将自动传递给视图。

最新更新