按钮中的网格内有两个标签,如何在WPF中以编程方式访问它们

时间:2017-11-30 06:46:24

标签: c# wpf button labels

所以我有一个带有许多按钮的网格,我需要按钮有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;
                }
            }

因此,当我有单独的按钮时,我需要一种方法来访问我的代码中的标签。

或者,我可以遍历我的主网格来获取按钮内的所有网格吗?

感谢您的帮助。

3 个答案:

答案 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嵌入主网格中。这样我就不需要复杂的命名约定。