2012-06-19 34 views
7

Tôi có một ngăn xếp chồng chứa một hình ảnh và một TextBlock. Tôi đang tăng một sự kiện khi người dùng đang thực hiện nhấp đúp chuột (PS - Tôi đang thêm StackPanel và đó là trẻ em (Hình ảnh và TextBlock theo chương trình nếu nó quan trọng)cách lấy con của một phần tử WPF

Bây giờ, tôi cần để có được phần tử TextBlock từ bên trong stackpanel, tôi hiểu rằng tôi nên làm điều đó bằng cách sử dụng DataBinding, nhưng tôi là người mới bắt đầu với WPF và thực sự không tìm thấy bất kỳ ví dụ nào về nó trong web. giải thích, cảm ơn bạn rất nhiều!

(tôi đã học về DataBinding một thời gian trước).

+0

Tại sao bạn thêm StackPanel và các con của nó theo lập trình? Rất có thể là bạn có thể có được những gì bạn muốn hoàn toàn trong Xaml, và hoặc là ràng buộc các nhấp chuột vào một lệnh, hoặc đơn giản là tham chiếu TextBlock theo tên. –

+0

@MichaelGraczyk Tôi đang đạt được dữ liệu tôi hiển thị (ví dụ: stackpanel) từ Cơ sở dữ liệu. – idish

+0

Bạn hầu như không bao giờ phải thêm các phần tử giao diện người dùng từ mã. Nếu giao diện người dùng không thay đổi trong thời gian chạy, bạn không nên thêm bất kỳ phần tử giao diện người dùng nào từ mã. Bạn có thể cung cấp cho các phần tử một tên có chỉ thị x: Name, và sau đó truy cập sau đó bằng tên đó từ mã phía sau. –

Trả lời

17

Một cách đơn giản để nhận được các phần tử con đầu tiên của một loại nhất định (ví dụ TextBlock) là thế này:

var textBlock = panel.Children.OfType<TextBlock>().FirstOrDefault(); 

Bạn có thể lấy TextBlock hoặc null đầu tiên nếu không có.

+0

Tuyệt vời! Nó hoạt động! Cảm ơn bạn rất nhiều! – idish

0

bạn cần DataBind TextBlockText elemen (?) t đến lớp học của bạn - như vậy:

Trong XAML

<TextBlock x:Name="MyTextBlock" 
    Text={Binding ShowThis, Mode=OneWay} /> 

trong lớp:

public class MyDataContextClass 
{ 
    private string showThis = string.Enpty; 
    public string ShowThis 
    { 
     get {return showThis;} 
     set 
     { 
       showThis = value; 
       if (PropertyChanged != null) 
        PropertyChanged(....); 
     } 
     } 
    } 

và bạn phải DataBing XAML đến lớp. (? Có thể là trong constructor)

public class MyXamlWindow 
    { 
     public MyXamlWindow() 
     { 
      this.DataContext = new MyDataContextClass(); 
     } 
    } 

rất nhiều cách để làm tất cả trên

+0

Và dĩ nhiên nếu anh ta chỉ muốn truy cập TextBlock, anh ta có thể chỉ cần sử dụng x: Name => MyTextBlock. – astreal

Các vấn đề liên quan