2012-07-04 4 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> 

дизайн будет как этотКак получить имя Lable динамически?

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(). Чтобы получить содержимое меток в Grid (например, "1!" - я предполагаю, что это то, что вам нужно, поскольку ничто другое не может перейти в простое поле строки, а также соответствовать общей схеме ваших первых двух кнопок), мы просто выбираем их содержимое и присоединить их к одной строке, после проверки, является ли содержимое строкой или сеткой.

+0

Скажите мне, что это правильный ответ, но я не могу понять. я должен получить имя ярлыков, когда я нажимаю btn_c. –

+0

Пожалуйста, разместите свой код с моим кодом, тогда я могу только понять. –

+0

Я переработал его, с полным примером. –

Смежные вопросы