如何在代码隐藏中访问Button.Content中的控件?

时间:2012-07-25 08:08:17

标签: c# wpf button controls

在XAML中,我创建了一个这样的按钮:

<Button MouseEnter="Button_MouseEnter">
    <Button.Content>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <TextBlock Grid.Row="0" Text="asd"/>
            <Label Grid.Row="1" Content="xxx"/>
            <Label Grid.Row="2" Content="yyy"/>
        </Grid>
    </Button.Content>
</Button>

现在我需要在代码隐藏中访问Button内容中的其中一个控件。假设我需要TextBlock。

private void Button_MouseEnter(object sender, MouseEventArgs e)
    {
        Button button = (Button)sender;
        // ? 
    }

我该怎么做? 此外,我有多个像这样的按钮,通过数据绑定自动创建。 我需要访问这些控件的原因是我想在某些情况下为其中一个控件制作动画。

3 个答案:

答案 0 :(得分:3)

        private void Button_MouseEnter(object sender, MouseEventArgs e)
    {
        Button b = sender as Button;
        TextBox textBox = null;
        if (b != null)
        {
            foreach (var frameworkElement in ((Grid)b.Content).Children)
            {
                if (frameworkElement is TextBox)
                {
                    textBox = (TextBox)frameworkElement;
                    break;
                }
            }

        }
    }

这只是为了让您了解如何提取作为按钮内容的Grid的子节点。我希望这能帮助你理解这个想法。

答案 1 :(得分:2)

您的按钮。内容应该是网格,对吗?你可以施放它。

答案 2 :(得分:0)

如果你想改变这些东西,我建议使用MVVM模式和DataBinding!

=&GT;为文本创建属性并将文本框绑定到此文本,而不必更改此属性,按钮将更改其文本。请参阅MVVM的PropertyChanged-Event!