所以我有一个带有许多按钮的网格,我需要按钮有2个不同的标签,所以我将它们添加到网格中。
<Button x:Name="Bid_0" Background="Blue" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Opacity=".7" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.ColumnSpan="2" Grid.Column="2" Grid.Row="5" Grid.RowSpan="2" Padding="0">
<Grid x:Name="Bid_0_Grid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label x:Name="Bid_Price_0" Grid.Row="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" UseLayoutRounding="True" Padding="0"/>
<Label x:Name="Bid_Vol_0" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" UseLayoutRounding="True" Padding="0"/>
</Grid>
</Button>
我有很多这些按钮,我按如下方式迭代它们:
foreach (UIElement element in L2TraderGrid.Children)
{
var button = element as Button;
if (button != null)
{
var name = button.Name.Split('_');
if(name[0] == "Bid")
{
BidButtons[int.Parse(name[1])] = button;
}
else if (name[0] == "Ask")
{
AskButtons[int.Parse(name[1])] = button;
}
}
因此,当我有单独的按钮时,我需要一种方法来访问我的代码中的标签。
或者,我可以遍历我的主网格来获取按钮内的所有网格吗?
感谢您的帮助。
答案 0 :(得分:1)
无需在GRID中添加它们。您可以从代码隐藏访问按钮的Content属性。在你的情况下例如:Bid_0.Content =&#34;你的标签&#34; 或者,如果您遵循MVVM设计,您甚至可以绑定按钮内容。
答案 1 :(得分:1)
它可能不是最好的解决方案。但是,如果您在按钮名称后面跟随“_Grid”的命名约定,则可以执行此操作。我相信你想要更优雅的东西。
Grid myGrid = (Grid)this.FindName(button.Name+"_Grid");
foreach (Control c in myGrid.Children )
{
if (c.GetType() == typeof(Label))
{
Label l = c;
l.Content = "text";
}
}
答案 2 :(得分:1)
我会创建一个UserControl并将我的按钮放在其中。然后我会将UserControl嵌入主网格中。这样我就不需要复杂的命名约定。