如何从WPF中的Button内的StackPanel中获取TextBlock的Text值

时间:2015-09-08 04:43:18

标签: c# wpf xaml button

我想知道如何从在WPF中按钮内的StackPanel内部的TextBlock中获取文本值,它非常像这样:

public MainWindow()
{
    Image img = new Image();
    img.Source = new BitmapImage(new Uri("image.png"));

    StackPanel stackPnl = new StackPanel();
    stackPnl.Orientation = Orientation.Vertical;
    stackPnl.Margin = new Thickness(10);
    stackPnl.Children.Add(img);

    TextBlock txtBlck = new TextBlock();
    txtBlck.Text = "this is a test!";
    stackPnl.Children.Add(txtBlck);

    Button btn = new Button();
    btn.Content = stackPnl;
    btn.Click += test_click;
    myPanel.Children.Add(btn);
}

并且test_click:

private void test_click(object sender, RoutedEventArgs e)
{
    txtBox.Text = (sender as Button).Content.ToString();
}

当然,我点击按钮后得到的是System.Windows.Controls.StackPanel,我猜这很明显,因为StackPanel是按钮的实际内容,但就像我说的那样,我需要知道如何只获取TextBlock的Text值,因此在这种情况下txtBox应该显示this is a test!。怎么能这样做?,并提前感谢!

3 个答案:

答案 0 :(得分:0)

最简单的方法是

TextBlock txtBlck = new TextBlock();
txtBlck.Name = "SomeName";
txtBlck.Text = "this is a test!";

而不是

private void test_click(object sender, RoutedEventArgs e)
{
    txtBox.Text = SomeName.Text;
}

答案 1 :(得分:0)

按钮内容是您的stackpanel而不是您的文本块,然后是您需要替换的文本块内容:

txtBox.Text =(发件人为Button)。内容;

由此

txtBox.Text = txtBlck.Text;

答案 2 :(得分:0)

如果您非常希望文本块中的文本,那么您不要将textblock公开并使用它。

public TextBlock txtBlck = new TextBlock();
        public MainWindow()
        {
            InitializeComponent();


            StackPanel stackPnl = new StackPanel();
            stackPnl.Orientation = Orientation.Vertical;
            stackPnl.Margin = new Thickness(10);


            txtBlck.Text = "this is a test!";
            stackPnl.Children.Add(txtBlck);

            Button btn = new Button();
            btn.Content = stackPnl;
            btn.Click +=btn_Click;
            myPanel.Children.Add(btn);
        }

        void btn_Click(object sender, RoutedEventArgs e)
        {
            txtBox.Text = txtBlck.Text;
        }