WPF C#:访问代码隐藏中按钮的子项

WPF C#:访问代码隐藏中按钮的子项,wpf,visual-studio,wpf-controls,Wpf,Visual Studio,Wpf Controls,如何在不使用名称属性的情况下访问B2标签2。诸如此类: <Button Name="B1"> <Grid> <Label/> <Label/> </Grid> </Button> <Button Name="B2"> <Grid> <Label/> <Lab

如何在不使用名称属性的情况下访问B2标签2。诸如此类:

<Button Name="B1">
    <Grid>
        <Label/>
        <Label/>
    </Grid>
</Button>
<Button Name="B2">
    <Grid>
        <Label/>
        <Label/>
    </Grid>
</Button>
<Button Name="B3">
    <Grid>
        <Label/>
        <Label/>
    </Grid>
</Button>

B2.Children[0].Children[1].Content=“谢谢您可以使用触发器来更改标签背景,方法如下:

B2.Children[0].Children[1].Content = "Thank You <3"


((标签)((网格)B2.Content).Children[1]).Content=“像这样";但是,为特定视图模型类型创建一个DataTemplate更有意义,该视图模型类型使用两个标签保存网格,其中标签的内容绑定到视图模型类的属性。然后将该类的一个实例分配给按钮的内容属性。您为我节省了很多时间,非常感谢!对于对象转换,我使用了一个扩展名,因此您的代码类似于:B2.Content.Root().Children[0].Root().Content=“like this”如果您愿意,可以使用它:public static T Root(此对象发送方){return(T)sender;}这对我来说没有任何意义。它是一个执行显式强制转换的静态方法,作为直接编写该强制转换的替代。完全没有意义,对不起。考虑使用数据板方法。这是有道理的。为什么要避免使用name或x:name属性?@uuddrlrss假设我想在单击按钮时更改第一个标签的背景,我可以执行以下操作:
Container.Children.OfType().ToList().ForEach(x=>x.Click+=(s,e)=>x.Content.Root().Children[0].Root().background=new SolidColorBrush(Color.FromRgb(0,0,0)))
但是如果使用name属性,那么这样做对我来说将是一个问题。感谢您的回复,根据文档:一旦条件不再满足,触发器将重置为初始状态。我想要实现的是在单击按钮后永久更改背景颜色。这就是为什么我在代码中创建此项。@ynsbl.eng,您可以按类型获取子元素,有关更多信息,请参阅:
  <Style TargetType="Label" x:Key="MyLable">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsPressed,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Button}}}"  Value="true">
                <Setter Property="Background" Value="Blue" ></Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>