2017-09-25 82 views
0

我有一個Button嵌入在裏面的TextBlock。當點擊Button時,我希望能夠獲取其中的TextBlock並修改其成員。獲取按鈕內的TextBlock

這裏是我的按鈕是如何設置:

<Button Click="Select_Click" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Left" Padding="0,20,20,20"> 
    <TextBlock Text="My text" FontSize="20" Style="{StaticResource TextBlockStyle}"/> 
</Button> 

在我後面的代碼我希望能夠訪問嵌入式TextBlock

public void Select_Click(object sender, RoutedEventArgs e) 
{ 
    // Get the `TextBlock` from `sender` here 
} 

我在視覺採取一看樹的Button,但我沒有看到TextBlock。我在Button上撥打了GetVisualChildren(),但我只看到一個Grid,無法進入Textblock

+1

你最好的選擇了,這將是使用綁定。正如你發現的那樣,XAML對這種方法並不是很友善。 –

+0

我同意這很可怕,但我不會說這太令人震驚。 – visc

+0

這只是最簡單的情況。它變得更糟。 XAML的設計目的不在於此。 –

回答

2

Button的內容存儲在其Content屬性中,在您的情況下,TextBlockButton的內容。

public void Select_Click(object sender, RoutedEventArgs e) 
{ 
    Button button = (Button)sender; 
    TextBlock textBlock = (TextBlock)button.Content; 
} 
1

只是做一些鑄造,這是很簡單的

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Establish_handlers(); 
    } 

    void Establish_handlers() 
    { 
     Mybutton.Click += Mybutton_Click; 

    } 

    private void Mybutton_Click(object sender, RoutedEventArgs e) 
    { 
     Button clicked_button = (Button)sender; 
     TextBlock desired_text = (TextBlock)clicked_button.Content; 
     Textbox_Show_Button_Content.Text = desired_text.Text; 
    } 
} 


<StackPanel> 
    <Button x:Name="Mybutton"> 
     <TextBlock>Hello</TextBlock> 
    </Button> 
    <TextBox x:Name="Textbox_Show_Button_Content"></TextBox> 
</StackPanel>