1

在 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 的 Content 中的这些控件之一。可以说我需要 TextBlock 之一。

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

我怎样才能做到这一点?此外,我还有多个像这样使用数据绑定自动创建的按钮。我需要访问这些控件的原因是我想在某些情况下为其中一个设置动画。

4

3 回答 3

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 的子项。我希望这能帮助你理解这个想法。

于 2012-07-25T08:29:57.880 回答
2

Your button.Content should be a Grid, right? you can cast it.

于 2012-07-25T09:17:59.840 回答
0

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

=> 为文本创建一个属性并将文本框绑定到该文本,而不是您只需更改此属性,按钮就会更改其文本。请参阅 MVVM 的 PropertyChanged 事件!

于 2012-07-25T08:34:02.150 回答