WPF 复制换行面板
WPF copying wrap panel
如何复制 WrapPanel?
我有 window,其中我有 WrapPanel,里面有一些控件。我想将它复制到我的代码中,这样我就可以在相同的 window 上有 2 个或更多外观精确的面板,但控件名称不同。
这是我的 XAML 的样子:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel x:Name="stackPanel" HorizontalAlignment="Left" Height="301" Margin="10,10,0,0" VerticalAlignment="Top" Width="498">
<WrapPanel x:Name="Wrap1" Height="142" Margin="0,0,345.6,0" VerticalAlignment="Top" Width="152">
<Button x:Name="wrap1_button" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<Button x:Name="wrap1_button1" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<Label x:Name="wrap1_label" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top" Width="74"/>
</WrapPanel>
</StackPanel>
</Grid>
我想将另一个 WrapPanel 放在第一个 WrapPanel 旁边,名为 Wrap2,控件位于 wrap2_button、wrap2_button1、wrap2_label 内。
我尝试将其插入 StackPanel 并执行类似的操作:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
WrapPanel Wrap2 = Wrap1;
stackPanel.Children.Add(Wrap2);
}
}
但是没用...
简而言之,您必须创建另一个 WrapPanel
,将其添加到 StackPanel
,并将 children 添加到第二个 WrapPanel
。
现在,如果您的反应是从复制中退缩,那是一种很好的本能。这可能是 UserControl
的一个很好的用例,它是一种捆绑标准 WPF 控件组以允许其重用的方法。
我建议创建一个新的 UserControl
,它是一个 WrapPanel
和您拥有的 children,然后将那个新 UserControl
的 2 个实例添加到window.
中的 StackPanel
Here 是 link 对 UserControl
class 的备注的 link 以及创建您自己的自定义控件的一些注意事项。
如何复制 WrapPanel?
我有 window,其中我有 WrapPanel,里面有一些控件。我想将它复制到我的代码中,这样我就可以在相同的 window 上有 2 个或更多外观精确的面板,但控件名称不同。
这是我的 XAML 的样子:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel x:Name="stackPanel" HorizontalAlignment="Left" Height="301" Margin="10,10,0,0" VerticalAlignment="Top" Width="498">
<WrapPanel x:Name="Wrap1" Height="142" Margin="0,0,345.6,0" VerticalAlignment="Top" Width="152">
<Button x:Name="wrap1_button" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<Button x:Name="wrap1_button1" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<Label x:Name="wrap1_label" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top" Width="74"/>
</WrapPanel>
</StackPanel>
</Grid>
我想将另一个 WrapPanel 放在第一个 WrapPanel 旁边,名为 Wrap2,控件位于 wrap2_button、wrap2_button1、wrap2_label 内。
我尝试将其插入 StackPanel 并执行类似的操作:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
WrapPanel Wrap2 = Wrap1;
stackPanel.Children.Add(Wrap2);
}
}
但是没用...
简而言之,您必须创建另一个 WrapPanel
,将其添加到 StackPanel
,并将 children 添加到第二个 WrapPanel
。
现在,如果您的反应是从复制中退缩,那是一种很好的本能。这可能是 UserControl
的一个很好的用例,它是一种捆绑标准 WPF 控件组以允许其重用的方法。
我建议创建一个新的 UserControl
,它是一个 WrapPanel
和您拥有的 children,然后将那个新 UserControl
的 2 个实例添加到window.
StackPanel
Here 是 link 对 UserControl
class 的备注的 link 以及创建您自己的自定义控件的一些注意事项。