2011-12-29 21 views
5

Tôi muốn tạo một lớp tiện ích đơn giản không có các phần tử trực quan và tạo nó trong XAML để tôi có thể định nghĩa các databindings. Tôi đã cố gắng để tạo ra lớp bắt nguồn từ DependencyObject và tạo nó trong phần Window.Resources nhưng nó không gọi bất kỳ hàm tạo nào.Cách tạo thể hiện của lớp trong XAML?

+0

Tôi đã tìm thấy giải pháp thay thế cho vấn đề này - đặt 'FindResource (" myClass ");' trong hàm tạo chính. – Poma

+0

Đẹp chút hack :) – BigL

Trả lời

1

Có vẻ như các phiên bản được tạo khi bạn thực sự sử dụng chúng. Tôi đã tìm thấy cách giải quyết dơ bẩn cho vấn đề này - để đặt FindResource("myClass"); trong hàm tạo chính.

4

Bạn có thể nhanh chóng lớp học của bạn trong App.xaml, chỉ cần thêm không gian tên của bạn để nó với

xmlns:yourNamespace="clr-namespace...." 

Nó rất dễ dàng IntelliSense giúp.

Và sau đó trong Application.Resources bạn tạo lớp học của bạn

<Application.Resources> 
    <yourNamespace:YourClass x:Key="yourClassInstanteName" />  
</Application.Resources> 

Tôi hy vọng điều này sẽ giúp bạn.

+0

Tôi đã làm điều đó. Vấn đề là trường hợp lớp không được tạo ra tại thời gian chạy (chỉ cần cố gắng để thả breakpoint trong constructor). – Poma

+3

Có vẻ như các cá thể được tạo ra khi bạn thực sự * sử dụng * chúng – Poma

+0

có nhưng Bindings của bạn đang sử dụng nó để nó khởi tạo nó – BigL

0

Tôi biết tôi đang đăng trên một Câu hỏi cũ nhưng tôi đã xem qua điều này trong khi cố gắng tự tìm câu trả lời. Các mã lớn L posted đã thực sự chính xác:

xmlns:yourNamespace="clr-namespace...." 

Đặt một bản sao trong Tài Ứng dụng:

<Application.Resources> 
    <yourNamespace:YourClass x:Key="yourClassInstanteName" />  
</Application.Resources> 

Chìa khóa bổ sung cho thông tin này là các lớp học cần phải có một constructor mặc định. Vì vậy, trong nguồn Class bạn nên có một phương pháp như vậy:

public yourClassName() 
Các vấn đề liên quan