WPF - 如何通过按下按钮来复制控件/整个网格?
WPF - How to duplicate Controls / a whole grid by pressing a button?
我是 WPF 的新手,我正在尝试制作一个控件,每次我点击它时都会使用特定控件扩展我的表单,直到它达到最多 7 次。
这是表格:
https://i.imgur.com/50tzCSy.png
<Border Padding="10">
<StackPanel>
<TextBlock Text="Insert a file or expand to insert more file at once." Margin="0 10"/>
<!-- Add File -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="File Name:" FontWeight="Bold" Margin="0 10" />
<TextBox Grid.Column="1" Height="20" Margin="10 0 0 0" />
<Button Grid.Column="2" Content="Test" Height="20" Width="50" />
</Grid>
<ItemsControl ItemsSource="{Binding AllChildren}" ItemTemplate="{StaticResource ChildTemplate}" />
<!-- Buttons -->
<Grid Margin="0 10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="0 0 10 0" Content="Save" />
<Button Grid.Column="1" Content="Expand" Grid.ColumnSpan="2" Margin="0.2,0,123.6,0.2" Click="Button_Click" />
<Button Grid.Column="2" Margin="10 0 0 0" Content="Cancel" />
</Grid>
</StackPanel>
</Border>
我尝试复制网格,直到达到最多 7 次重复。
如何通过按钮事件处理程序代码实现此目的?
这是我的评论的插图。我尽量保持 ViewModel 尽可能简单和通用,所以它看起来应该是空的。由您来修改它,并最终放置一些 DataBinding(我会推荐它)。
如果您需要更具体的信息,请告诉我们。 XAML:
<Border Padding="10">
<StackPanel>
<TextBlock Text="Insert a file or expand to insert more file at once." Margin="0 10"/>
<ListBox Name="DynamicList" HorizontalContentAlignment="Stretch" >
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:FileM}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="File Name:" FontWeight="Bold" Margin="0 10" />
<TextBox Grid.Column="1" Height="20" Margin="10 0 0 0" />
<Button Grid.Column="2" Content="Test" Height="20" Width="50" />
</Grid>
</DataTemplate>
</ListBox.Resources>
</ListBox>
<!--Since I don'T have any information about it, I removed the ItemsControl part-->
<Grid Margin="0 10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="0 0 10 0" Content="Save" />
<Button Grid.Column="1" Content="Expand" Click="Button_Click" />
<Button Grid.Column="2" Margin="10 0 0 0" Content="Cancel" />
</Grid>
</StackPanel>
</Border>
后面的代码:
public class FileM
{
}
public partial class MainWindow : Window
{
public ObservableCollection<FileM> ListFiles = new ObservableCollection<FileM>();
public MainWindow()
{
InitializeComponent();
DynamicList.ItemsSource = ListFiles;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if(ListFiles.Count<7){ListFiles.Add(new FileM());}
}
}
我是 WPF 的新手,我正在尝试制作一个控件,每次我点击它时都会使用特定控件扩展我的表单,直到它达到最多 7 次。
这是表格: https://i.imgur.com/50tzCSy.png
<Border Padding="10">
<StackPanel>
<TextBlock Text="Insert a file or expand to insert more file at once." Margin="0 10"/>
<!-- Add File -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="File Name:" FontWeight="Bold" Margin="0 10" />
<TextBox Grid.Column="1" Height="20" Margin="10 0 0 0" />
<Button Grid.Column="2" Content="Test" Height="20" Width="50" />
</Grid>
<ItemsControl ItemsSource="{Binding AllChildren}" ItemTemplate="{StaticResource ChildTemplate}" />
<!-- Buttons -->
<Grid Margin="0 10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="0 0 10 0" Content="Save" />
<Button Grid.Column="1" Content="Expand" Grid.ColumnSpan="2" Margin="0.2,0,123.6,0.2" Click="Button_Click" />
<Button Grid.Column="2" Margin="10 0 0 0" Content="Cancel" />
</Grid>
</StackPanel>
</Border>
我尝试复制网格,直到达到最多 7 次重复。
如何通过按钮事件处理程序代码实现此目的?
这是我的评论的插图。我尽量保持 ViewModel 尽可能简单和通用,所以它看起来应该是空的。由您来修改它,并最终放置一些 DataBinding(我会推荐它)。
如果您需要更具体的信息,请告诉我们。 XAML:
<Border Padding="10">
<StackPanel>
<TextBlock Text="Insert a file or expand to insert more file at once." Margin="0 10"/>
<ListBox Name="DynamicList" HorizontalContentAlignment="Stretch" >
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:FileM}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="File Name:" FontWeight="Bold" Margin="0 10" />
<TextBox Grid.Column="1" Height="20" Margin="10 0 0 0" />
<Button Grid.Column="2" Content="Test" Height="20" Width="50" />
</Grid>
</DataTemplate>
</ListBox.Resources>
</ListBox>
<!--Since I don'T have any information about it, I removed the ItemsControl part-->
<Grid Margin="0 10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="0 0 10 0" Content="Save" />
<Button Grid.Column="1" Content="Expand" Click="Button_Click" />
<Button Grid.Column="2" Margin="10 0 0 0" Content="Cancel" />
</Grid>
</StackPanel>
</Border>
后面的代码:
public class FileM
{
}
public partial class MainWindow : Window
{
public ObservableCollection<FileM> ListFiles = new ObservableCollection<FileM>();
public MainWindow()
{
InitializeComponent();
DynamicList.ItemsSource = ListFiles;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if(ListFiles.Count<7){ListFiles.Add(new FileM());}
}
}