5

Trong một trong những ứng dụng tôi đang làm việc tôi đã tìm thấy mã này -Mục đích của việc sử dụng FrameworkElementFactory

public class MatrixCellTemplate : ColumnDataTemplate<MatrixCellContainer> 
{ 
} 

public class ColumnDataTemplate<T> : DataTemplate where T : FrameworkElement 
{ 
    public ColumnDataTemplate() 
    { 
     FrameworkElementFactory factory = new FrameworkElementFactory(typeof(T)); 
     VisualTree = factory; 
    } 
} 

MatrixCellTemplate này được sử dụng để thiết lập các CellTemplate của một tùy chỉnh DataGridTemplateColumn (sau này được bổ sung vào DataGrid.Columns bộ sưu tập) như thế này -

<DataGridTemplateColumn.CellTemplate> 
    <Matrix:MatrixCellTemplate /> 
</DataGridTemplateColumn.CellTemplate> 

tôi không chắc chắn lợi ích của việc sử dụng FrameworkElementFactory này và những gì vấn đề tôi có thể phải đối mặt nếu tôi trực tiếp sử dụng MatrixCellContainer như mẫu di động là gì -

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Matrix:MatrixCellContainer> 
     </Matrix:MatrixCellContainer> 
    </DataTemplate> 
    <!--<Matrix:MatrixCellTemplate />--> 
</DataGridTemplateColumn.CellTemplate> 

Trả lời

8

Khó đoán lý do đằng sau mã này, có thể để giảm XAML, ở vị trí đầu tiên).

Trong thực tế FrameworkElementFactory bị phản anyway:

Lớp này là một cách NỮA để lập trình tạo mẫu, đó là lớp con của FrameworkTemplate như ControlTemplate hoặc DataTemplate; không phải tất cả chức năng mẫu đều có sẵn khi bạn tạo mẫu bằng cách sử dụng lớp này. Cách được đề xuất để tạo một khuôn mẫu theo chương trình là tải XAML từ một chuỗi hoặc một luồng bộ nhớ bằng cách sử dụng phương thức Nạp của lớp XamlReader.

+0

Cảm ơn H.B., +1 cho thông tin không được dùng nữa. Tôi vẫn sẽ tìm cách để biết trong trường hợp nào nó có ý nghĩa để sử dụng FrameworkElementFactory với DataGrid. – akjoshi

+0

Một trong những mục đích là hiệu suất. Nếu bạn có nhiều điều khiển với các mẫu phức tạp, việc tạo các điều khiển từ XAML chậm hơn nhiều so với việc tạo mã. – TcKs

+0

@TcKs: Chỉ cho tôi dữ liệu thực nghiệm của bạn vì tôi sẽ không tin nó nếu không, chúng ta đang nói về các mẫu ở đây, các điều khiển không được khởi tạo cho đến khi cần thiết. Nếu bạn định nghĩa một khuôn mẫu trong mã hoặc trong XAML không quan trọng chút nào, cả hai đều được biên dịch trừ khi bạn sử dụng XAML rỗng không chắc chắn. –

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