根据内容查找按钮

时间:2012-01-18 02:48:26

标签: wpf silverlight xaml

 <StackPanel Name="stTeam2" Width="40" >
     <Button Click="Team2_Click"  Height="55" Name="btn1T2" Width="30">T1</Button>
     <Button Click="Team2_Click" Height="55" Name="btn2T2" Width="30">T2</Button>
     <Button Click="Team2_Click" Height="55" Name="btn3T2" Width="30">T3</Button>
     <Button Click="Team2_Click" Height="55" Name="btn4T2" Width="30">T4</Button>
     <Button Click="Team2_Click" Height="55" Name="btn5T2" Width="30">T5</Button>
     <Button Click="Team2_Click" Height="55" Name="btn6T2" Width="30">T6</Button>
     <Button Click="Team2_Click" Height="55" Name="btn7T2" Width="30">T7</Button>
 </StackPanel>

是否可以根据内容找到Button控件。

如果指定了T5,我们可以在stackpanel中找到对照btn5T2吗?

3 个答案:

答案 0 :(得分:1)

当然,通过Visual Tree(VisualTreeHelper类),您可以找到每个元素,并且可以检查其内容。

对于面板,您可以通过其Panel.Children属性循环子元素。

答案 1 :(得分:1)

是的,你可以......虽然完全没有效率的方式来开发WPF软件。
由于您在XAML中为StackPanel指定了名称,因此可以从Code-Behind

访问它

代码背后

for (int i = 0; i < stTeam2.Children.Count; i++)
{
    if (stTeam2.Children[i].GetType() == typeof(Button))
    {
        Button currentButton = (Button)stTeam2.Children[i];
        if (currentButton.Content.ToString().Equals("T4"))
        {
            // Do something
        }
    }
}

答案 2 :(得分:1)

与MyKuLLSKI的答案类似,但使用LINQ:

var matchingButton = stTeam2.Children.OfType<Button>().Where(
                         btn => btn.Content.ToString().Equals("T5")).FirstOrDefault();