2011-11-14 26 views
34

Tôi đang cố truy cập vào điều khiển người dùng nằm bên trong mẫu điều khiển của kiểm soát nội dung. Cụ thể:Làm cách nào để truy cập vào phần tử mẫu kiểm soát từ bên trong mã sau

<ContentControl x:Name="MyList" > 
     <ContentControl.Template> 
      <ControlTemplate x:Name="MyControlTemplate"> 
       <Border RenderTransformOrigin="0,0" x:Name="border"> 
        <UserControls:MyControl x:Name="MyControlName" Width="100" ViewModel="{Binding}" /> 

Tôi có thể truy cập mục này.MyList nhưng không tìm thấy. Làm cách nào để truy cập đối tượng MyControlName từ mã-đằng sau trong trường hợp này?

Cảm ơn!

+0

Tôi có cảm giác bạn nên nói với những gì bạn đang cố gắng đạt được, tỷ lệ cược là bạn không phải làm những gì bạn đang yêu cầu. – flq

Trả lời

62

Bạn cần phải nhận được mẫu và xác định vị trí kiểm soát bởi tên trên điều khiển templated, một cái gì đó như:

var template = MyList.Template; 
var myControl = (MyControl)template.FindName("MyControlName", MyList); 

Templates chỉ rằng: giới thiệu tóm tắt về những gì đang được tạo ra, các điều khiển trong các mẫu chỉ tồn tại trong bối cảnh của một cái gì đó đang được templated.


Lưu ý rằng bạn chỉ nên truy cập vào các yếu tố trong một kiểm soát mẫu nếu bạn là tác giả kiểm soát mà mẫu là cho. Truy cập từ bên ngoài nên được thực hiện thông qua các thuộc tính và phương thức bị ràng buộc.

Đối với mẫu dữ liệu điều này tương tự. Tất cả những thứ bạn cần truy cập phải được ràng buộc với một đối tượng và truy cập sau đó sẽ được thông qua đối tượng đã nói. Điều này đặc biệt đúng trong trường hợp điều khiển mục ảo hóa các mục của chúng, vì vậy các phần tử thậm chí không tồn tại phần lớn thời gian.

4

U cũng có thể lấy quyền kiểm soát từ mọi mẫu bằng cách thêm sự kiện được tải trong kiểm soát và sau đó mã chỉ định người gửi sự kiện cho một số biến.

+1

@Krythic, "Sự đơn giản của câu trả lời" này "làm cho nó ..." Câu trả lời này không đơn giản hơn câu trả lời được chấp nhận. Bên cạnh đó, câu trả lời đơn giản hơn là tốt hơn không tệ hơn :) –

+0

Kiểm soát của tôi được chôn sâu trong một chuỗi các phong cách và các mẫu tùy chỉnh và sự kiện này đã cứu tôi. Cảm ơn bạn. – grinder22

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