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>

そして今、コード ビハインドでボタンのコンテンツ内のこれらのコントロールの 1 つにアクセスする必要があります。TextBlock が必要だとしましょう。

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

どうやってやるの?また、データバインディングで自動的に作成されたこのようなボタンが複数あります。これらのコントロールにアクセスする必要があるのは、特定の状況でそれらの 1 つをアニメーション化するためです。

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

あなたのbutton.ContentはGridでなければなりませんよね?あなたはそれをキャストすることができます。

于 2012-07-25T09:17:59.840 に答える
0

そのようなことを変更したい場合は、MVVM パターンと DataBinding を使用することをお勧めします!

=>テキストのプロパティを作成し、テキストボックスをこのテキストにバインドします。このプロパティを変更するだけで、ボタンのテキストが変更されます。MVVM の PropertyChanged イベントを参照してください。

于 2012-07-25T08:34:02.150 に答える