我正在读取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。该命令将修改备份的名称,该名称将自动传递给视图。