2012-07-04 240 views
0
<Grid x:Name="LayoutRoot"> 
    <TextBox x:Name="txt_diplay_1" HorizontalAlignment="Left" Height="42" Margin="155,78,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="103.5" GotFocus="txt_diplay_1_GotFocus" /> 
    <TextBox x:Name="txt_diplay_2" Height="42" Margin="297,78,239.5,0" TextWrapping="Wrap" VerticalAlignment="Top" GotFocus="txt_diplay_2_GotFocus" /> 
    <Button x:Name="btn_a" Content="A" HorizontalAlignment="Left" Height="40" Margin="155,147,0,0" VerticalAlignment="Top" Width="73" Click="btn_a_Click" /> 
    <Button x:Name="btn_b" Content="B" Height="40" Margin="237,147,0,0" VerticalAlignment="Top" Click="btn_b_Click" HorizontalAlignment="Left" Width="73" /> 
    <Button x:Name="btn_c" Height="40" Margin="0,147,239.5,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="73" Click="btn_c_Click" > 
     <Grid Height="30.833" Width="61.5"> 
      <Label x:Name="lbl_1" Content="1" Margin="22.498,6.5,19.501,2.166"/> 
      <Label x:Name="lbl_2" Content="!" HorizontalAlignment="Right" Margin="0,-4.422,0,13.088" Width="19.501"/> 
     </Grid> 
    </Button> 
</Grid> 

的設計會是這樣如何動態獲取標籤名稱?

Result

public partial class MainWindow : Window 
{ 
    Control TexboxDetails = null;  
    Control ButtonDetails;    
    Button BehaveButton;  

    public MainWindow() 
    { 
     this.InitializeComponent(); 
    } 

private void btn_a_Click(object sender, RoutedEventArgs e) 
    { 
     ButtonDetails = (Control)sender; 
     all_in_one(); 
    } 

    private void btn_b_Click(object sender, RoutedEventArgs e) 
    { 
     ButtonDetails = (Control)sender; 

     all_in_one(); 
    } 

    private void btn_c_Click(object sender, RoutedEventArgs e) 
    { 

    } 

    private void txt_diplay_1_GotFocus(object sender, RoutedEventArgs e) 
    { 
     TexboxDetails = (Control)sender; 
    } 

    private void txt_diplay_2_GotFocus(object sender, RoutedEventArgs e) 
    { 
     TexboxDetails = (Control)sender; 
    } 

    public void all_in_one() 
    { 
     BehaveButton = ButtonDetails as Button; 
     if (TexboxDetails != null) 
     { 
      TextBox BehaveTextbox = TexboxDetails as TextBox; 
      var caret_index = BehaveTextbox.CaretIndex; 
      BehaveTextbox.Text = BehaveTextbox.Text.Insert(caret_index, BehaveButton.Content.ToString()); 
      BehaveTextbox.Focus(); 
      BehaveTextbox.CaretIndex = caret_index + 1; 
     } 
    } 
} 

有了上面的代碼,我可以得到按鈕名稱動態當我點擊該按鈕。 在上圖中,一個按鈕(btn_c)有兩個標籤。現在我想單擊按鈕(btn_c)時動態獲取單獨的標籤名稱。

回答

1

你可以讓他們像這樣(的 btn_c點擊處理程序中):

var btn_c = (Button)sender; 
Grid grid = (Grid)btn_c.Content; 
Label label1 = (Label)grid.Children[0]; 
string name1 = label1.Name; 
0

你的整個設計真的可以使用一些返工。看看下面的代碼:(注意事件處理程序的數量減少;您將需要修改XAML使用這些)

public partial class MainWindow : Window 
{ 
    TextBox LastFocusedTextBox; 
    public MainWindow() 
    { 
     this.InitializeComponent(); 
    } 

    private void btn_Click(object sender, RoutedEventArgs e) 
    { 
     InsertButtonContent((Button)sender); 
    } 

    private void txt_diplay_GotFocus(object sender, RoutedEventArgs e) 
    { 
     LastFocusedTextBox = (TextBox)sender; 
    } 

    public void InsertButtonContent(Button button) 
    { 
     if (LastFocusedTextBox != null) 
     { 
      string buttonContentString = button.Content as string; 
      if (string.IsNullOrEmpty(buttonContentString)) 
      { 
       var grid = button.Content as Grid; 
       if (grid != null) 
        buttonContentString = string.Join("", grid.Children.OfType<ContentControl>().Select(x => x.Content)); 
      } 
      var caret_index = LastFocusedTextBox.CaretIndex; 
      LastFocusedTextBox.Text = LastFocusedTextBox.Text.Insert(caret_index, buttonContentString); 
      LastFocusedTextBox.Focus(); 
      LastFocusedTextBox.CaretIndex = caret_index + buttonContentString.Length; 
     } 
    } 
} 

注意如何Button傳遞給方法,而不是存儲在領域。此外,類別和本地all_in_one()方法中的不必要字段都已刪除。要獲取網格中標籤的內容(例如"1!" - 我認爲這是你以後的樣子,因爲沒有其他東西可以進入簡單的字符串字段,並且也匹配前兩個按鈕的一般模式),我們只需選擇它們的內容並在檢查內容是字符串還是網格之後將它們連接成單個字符串。

+0

明確告訴我,這似乎是正確的答案,但我無法理解。當我點擊btn_c時,我必須得到標籤名稱。 –

+0

請將您的代碼與我的代碼,然後只有我能理解。 –

+0

我用一個完整的例子重新編寫了它。 –