2009-10-05 34 views
7

Tôi có một điều khiển người dùng áp dụng kiểu cho nút, với kiểu có chứa phần ControlTemplate. Trong ControlTemplate, có nhiều phần tử giao diện người dùng khác nhau như Ellipse và Path.WPF đặt tên là các yếu tố phong cách từ mã phía sau?

Nếu tôi cung cấp các yếu tố đó - Ellipse và Path - tên có x: Tên, tôi có thể truy cập chúng từ mã phía sau không?

Dường như Ellipse và Đường dẫn của kiểu không hiển thị vì tôi nhận được lỗi biên dịch (C#).

Tôi có làm theo cách này sai không?

Trả lời

18

Vì một mẫu có thể được khởi tạo nhiều lần nên không thể liên kết thành viên được tạo thông qua x:Name. Thay vào đó, bạn phải tìm phần tử được đặt tên trong mẫu được áp dụng cho điều khiển.

Với XAML đơn giản:

<ControlTemplate x:Key="MyTemplate"> 
    <Ellipse x:Name="MyEllipse" /> 
</ControlTemplate> 

Bạn sẽ làm một cái gì đó như thế này:

var template = (ControlTemplate)FindResource("MyTemplate"); 

template.FindName("MyEllipse", myControl); 

Hoặc thậm chí đơn giản hơn:

var ellipse = (Ellipse)myControl.Template.FindName("MyEllipse", myControl); 

Bạn có thể đọc về FrameworkTemplate.FindName.

Một số ví dụ và thảo luận here, herehere.

+0

Tuyệt vời, cảm ơn rất nhiều! – MattJ

+11

Nếu nó là hoàn hảo thì đánh dấu nó là câu trả lời. – Vaccano

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