StackPanel 行
Row of StackPanels
我正在创建一个 WPF 应用程序,其中包含已手动放置在特定位置的 100
个 StackPanels
,并为每个应用程序分配了起始背景颜色。 XAML 部分如下所示:
<StackPanel Height="300" HorizontalAlignment="Left" Margin="228,120,0,0" Name="stackPanel1"
VerticalAlignment="Top" Width="6" Background="Red" />
<StackPanel Background="Red" Height="300" HorizontalAlignment="Left" Margin="234,120,0,0"
Name="stackPanel2" VerticalAlignment="Top" Width="6" />
<StackPanel Background="Red" Height="300" HorizontalAlignment="Left" Margin="240,120,0,0"
Name="stackPanel3" VerticalAlignment="Top" Width="6" />
<StackPanel Background="Red" Height="300" HorizontalAlignment="Left" Margin="246,120,0,0"
Name="stackPanel4" VerticalAlignment="Top" Width="6" />
<StackPanel Background="Red" Height="300" HorizontalAlignment="Left" Margin="252,120,0,0"
Name="stackPanel5" VerticalAlignment="Top" Width="6" />
可以看出,Background
是前5个Red
,Width
是6
(Margin
每一个都被放置在另一个之后的 6 个单位以使其连接)。
现在,我想要的是,例如,在 .cs 中能够通过创建包含它们的行来处理它们(或多或少像 [stackPanel1
、stackPanel2
、.. ., stackPanel100
])。我想这样做,例如,使用以下代码更改前 5 个的颜色:
for(int i=0;i<100;i++){
if(i<10){
stackPanelsRow[i].Background = Colors.Blue; //Change the background color to blue
}
if(i>10 && i<20){
stackPanelsRow[i].Background = Colors.Green; //Change the background color to green
}
//...
}
如果它们是在设计器中创建并根据上述条件手动放置的单独实体,我如何构造 StackPanels
这一行?
在 WPF 中,您可以使用 Style
来达到这个目的:
<Window.Resources>
<Style TargetType="StackPanel">
<Setter Property="Background" Value="Red"></Setter>
</Style>
</Window.Resources>
<Grid>
<StackPanel ... /> <!--You don't need to set background here anymore-->
<StackPanel ... />
....
</Grid>
如果您不想为所有相同类型的元素分配相同的颜色,您可以使用 x:Key 样式,然后应用到您想要的每个 StackPanel:
<Style TargetType="StackPanel" x:Key="MyStyle">
然后:
<StackPanel Style="{StaticResource MyStyle}" ... />
编辑: 另一种选择是这样的:
<Grid x:Name="mainGrid">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Name="stackPanel1" Width="6" />
<StackPanel Grid.Row="1" Height="300" Name="stackPanel2" Width="6" />
<StackPanel Grid.Row="2" Height="300" Name="stackPanel3" Width="6" />
<StackPanel Grid.Row="3" Height="300" Name="stackPanel4" Width="6" />
<StackPanel Grid.Row="4" Height="300" Name="stackPanel5" Width="6" />
</Grid>
然后在代码隐藏中:
foreach (var stackpanl in mainGrid.Children.OfType<StackPanel>())
{
if (Grid.GetRow(stackpanl) < 2)
{
stackpanl.Background = new SolidColorBrush(Colors.Blue);
}
}
通过 StackPanel 包装您的堆栈面板
<StackPanel x:Name="StackPanelTest" Orientation="Horizontal">
<StackPanel/>
<StackPanel/>
<StackPanel/>
</StackPanel>
而且你可以点赞
var someStackPanel = StackPanelTest.Children[0] as StackPanel;
我正在创建一个 WPF 应用程序,其中包含已手动放置在特定位置的 100
个 StackPanels
,并为每个应用程序分配了起始背景颜色。 XAML 部分如下所示:
<StackPanel Height="300" HorizontalAlignment="Left" Margin="228,120,0,0" Name="stackPanel1"
VerticalAlignment="Top" Width="6" Background="Red" />
<StackPanel Background="Red" Height="300" HorizontalAlignment="Left" Margin="234,120,0,0"
Name="stackPanel2" VerticalAlignment="Top" Width="6" />
<StackPanel Background="Red" Height="300" HorizontalAlignment="Left" Margin="240,120,0,0"
Name="stackPanel3" VerticalAlignment="Top" Width="6" />
<StackPanel Background="Red" Height="300" HorizontalAlignment="Left" Margin="246,120,0,0"
Name="stackPanel4" VerticalAlignment="Top" Width="6" />
<StackPanel Background="Red" Height="300" HorizontalAlignment="Left" Margin="252,120,0,0"
Name="stackPanel5" VerticalAlignment="Top" Width="6" />
可以看出,Background
是前5个Red
,Width
是6
(Margin
每一个都被放置在另一个之后的 6 个单位以使其连接)。
现在,我想要的是,例如,在 .cs 中能够通过创建包含它们的行来处理它们(或多或少像 [stackPanel1
、stackPanel2
、.. ., stackPanel100
])。我想这样做,例如,使用以下代码更改前 5 个的颜色:
for(int i=0;i<100;i++){
if(i<10){
stackPanelsRow[i].Background = Colors.Blue; //Change the background color to blue
}
if(i>10 && i<20){
stackPanelsRow[i].Background = Colors.Green; //Change the background color to green
}
//...
}
如果它们是在设计器中创建并根据上述条件手动放置的单独实体,我如何构造 StackPanels
这一行?
在 WPF 中,您可以使用 Style
来达到这个目的:
<Window.Resources>
<Style TargetType="StackPanel">
<Setter Property="Background" Value="Red"></Setter>
</Style>
</Window.Resources>
<Grid>
<StackPanel ... /> <!--You don't need to set background here anymore-->
<StackPanel ... />
....
</Grid>
如果您不想为所有相同类型的元素分配相同的颜色,您可以使用 x:Key 样式,然后应用到您想要的每个 StackPanel:
<Style TargetType="StackPanel" x:Key="MyStyle">
然后:
<StackPanel Style="{StaticResource MyStyle}" ... />
编辑: 另一种选择是这样的:
<Grid x:Name="mainGrid">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Name="stackPanel1" Width="6" />
<StackPanel Grid.Row="1" Height="300" Name="stackPanel2" Width="6" />
<StackPanel Grid.Row="2" Height="300" Name="stackPanel3" Width="6" />
<StackPanel Grid.Row="3" Height="300" Name="stackPanel4" Width="6" />
<StackPanel Grid.Row="4" Height="300" Name="stackPanel5" Width="6" />
</Grid>
然后在代码隐藏中:
foreach (var stackpanl in mainGrid.Children.OfType<StackPanel>())
{
if (Grid.GetRow(stackpanl) < 2)
{
stackpanl.Background = new SolidColorBrush(Colors.Blue);
}
}
通过 StackPanel 包装您的堆栈面板
<StackPanel x:Name="StackPanelTest" Orientation="Horizontal">
<StackPanel/>
<StackPanel/>
<StackPanel/>
</StackPanel>
而且你可以点赞
var someStackPanel = StackPanelTest.Children[0] as StackPanel;