các sự khác biệt giữa các 2 bindings là gì?WPF TemplateBinding vs RelativeSource TemplatedParent
Trả lời
TemplateBinding không hoàn toàn giống nhau. Tài liệu MSDN thường được viết bởi những người phải kiểm tra các SDE đơn sắc về các tính năng của phần mềm, do đó các sắc thái không hoàn toàn đúng.
MẫuBìm kiếm được đánh giá tại thời gian biên dịch dựa vào loại được chỉ định trong mẫu điều khiển. Điều này cho phép tạo nhanh các mẫu được biên dịch nhanh hơn nhiều. Chỉ cần fumble tên trong một templatebinding và bạn sẽ thấy rằng trình biên dịch sẽ gắn cờ nó.
Đánh dấu ràng buộc được giải quyết khi chạy. Trong khi chậm hơn để thực thi, ràng buộc sẽ giải quyết các tên thuộc tính không hiển thị trên loại được khai báo bởi khuôn mẫu. Bởi chậm hơn, tôi sẽ chỉ ra rằng loại tương đối của nó kể từ khi hoạt động ràng buộc mất rất ít cpu của ứng dụng. Nếu bạn đã nổ mìn các mẫu kiểm soát xung quanh ở tốc độ cao, bạn có thể nhận thấy nó.
Như một vấn đề thực tế, hãy sử dụng TemplateBinding khi bạn có thể nhưng đừng sợ Binding.
Vì vậy, chính nên nhớ: Thời gian biên dịch so với Thời gian chạy. TemplateBinding sẽ không hoạt động nếu bạn thử thay đổi trong suốt thời gian chạy. Đúng ? –
Cũng lưu ý rằng việc sử dụng Binding thay vì TemplateBinding có thể có tác động như những gì bạn thấy trong Thời gian thiết kế. Trong các cấu hình nhất định, các thuộc tính bị ràng buộc sử dụng {Binding RelativeSource ...} sẽ không xuất hiện trong trình thiết kế (mặc dù chúng vẫn hiển thị trong suốt thời gian chạy), nhưng nếu bạn chuyển sang sử dụng {TemplateBinding ...}, các thuộc tính đó được đánh giá trong thời gian thiết kế. – lfalin
Chúng được sử dụng theo cách tương tự nhưng chúng có một vài khác biệt. Dưới đây là một liên kết đến tài liệu TemplateBinding: http://msdn.microsoft.com/en-us/library/ms742882.aspx
TemplateBinding là viết tắt của Ràng buộc với TemplatedParent nhưng nó không tiếp xúc với tất cả khả năng của các lớp Binding, ví dụ bạn không thể kiểm soát Binding.Mode từ TemplateBinding.
Tôi nghĩ TemplateBinding không hỗ trợ các loại Freezable (bao gồm các đối tượng cọ vẽ). Để giải quyết vấn đề. Người ta có thể sử dụng TemplatedParent
Một điều nữa - TemplateBindings không cho phép chuyển đổi giá trị. Chúng không cho phép bạn chuyển đổi một Trình chuyển đổi và không tự động chuyển đổi chuỗi int thành chuỗi (ví dụ như bình thường đối với một Ràng buộc).
Cảm ơn Miroslav, đây là vấn đề tôi gặp phải, việc chuyển sang sử dụng TemplatedParent đã giải quyết được vấn đề. – MikeKulls
TemplateBinding - Nhiều hạn chế so với sử dụng thường xuyên Binding
- More hiệu quả hơn một Ràng buộc nhưng nó có chức năng ít
- Chỉ làm việc bên trong cây thị giác của một ControlTemplate
- Không làm việc với tài sản trên Freezables
- Không hoạt động trong Trình kích hoạt của ControlTemplate
- Cung cấp lối tắt trong cài đặt g thuộc tính (không phải là tiết), ví dụ:{TemplateBinding targetProperty}
Regular Binding - Không có ở trên giới hạn của TemplateBinding
- Thuộc tính Tôn Trọng Chánh
- Resets Target giá trị rõ ràng ra bất kỳ thiết lập một cách rõ ràng giá trị
- Ví dụ: < Ellipse Fill = "{Binding RelativeSource = {RelativeSource TemplatedParent}, Đường dẫn = nền}"/>
RelativeSource TemplatedParent
Chế độ này cho phép gắn một tài sản ControlTemplate trao cho một thuộc tính của điều khiển mà các ControlTemplate được áp dụng cho. Để hiểu rõ vấn đề ở đây là một ví dụ dưới đây
<Window.Resources>
<ControlTemplate x:Key="template">
<Canvas>
<Canvas.RenderTransform>
<RotateTransform Angle="20"/>
</Canvas.RenderTransform>
<Ellipse Height="100" Width="150"
Fill="{Binding
RelativeSource={RelativeSource TemplatedParent},
Path=Background}">
</Ellipse>
<ContentPresenter Margin="35"
Content="{Binding RelativeSource={RelativeSource
TemplatedParent},Path=Content}"/>
</Canvas>
</ControlTemplate>
</Window.Resources>
<Canvas Name="Parent0">
<Button Margin="50"
Template="{StaticResource template}" Height="0"
Canvas.Left="0" Canvas.Top="0" Width="0">
<TextBlock FontSize="22">Click me</TextBlock>
</Button>
</Canvas>
Nếu tôi muốn áp dụng các đặc tính của một điều khiển cho mẫu kiểm soát thì tôi có thể sử dụng chế độ TemplatedParent. Ngoài ra còn có một phần mở rộng tương tự với phần mở rộng đánh dấu này là TemplateBinding là một loại ngắn của cái đầu tiên, nhưng TemplateBinding được đánh giá tại thời gian biên dịch ở độ tương phản của TemplatedParent được đánh giá ngay sau lần chạy đầu tiên. Như bạn có thể nhận xét trong hình dưới đây, nền và nội dung được áp dụng từ bên trong nút đến mẫu điều khiển.
- 1. Khi nào sử dụng TemplateBinding và TemplatedParent trong WPF
- 2. WPF - RelativeSource trong Phong cách
- 3. WPF sử dụng MVVM: DataBinding với RelativeSource
- 4. Sử dụng một TemplateBinding trong ControlTemplate.Triggers
- 5. Điều khiển tùy chỉnh WPF: TemplateBinding to Image
- 6. "RelativeSource FindAncestor" của WPF Data Binding chính xác là gì?
- 7. hiệu suất chậm với WPF DataGrid và ScrollViewer
- 8. WPF StackPanel Layout Câu hỏi
- 9. WPF TextBox.Text với MultiBinding
- 10. WPF ràng buộc với RelativeSource của Window Yêu cầu "DataContext" trong đường dẫn?
- 11. Thuộc tính cha mẹ ràng buộc WPF trong HierarchicalDataTemplate
- 12. WPF vs Silverlight
- 13. WPF Grid vs Stackpanel
- 14. (wpf) Application.Current.Resources vs FindResource
- 15. TemplateBinding hoạt động như thế nào trong Mẫu UserControl?
- 16. WPF: Ràng buộc một số nguyên vào một TextBlock với TemplateBinding
- 17. WPF Style Setter của tôi có thể sử dụng một TemplateBinding không?
- 18. WPF Thêm thuộc tính tùy chỉnh trong điều khiển
- 19. Ràng buộc tài sản phụ thuộc tùy chỉnh theo kiểu WPF tùy chỉnh
- 20. WPF ItemsControl Index ListIt hiện tại trong ItemsSource
- 21. WPF ListBox Image Chọn saga tiếp tục
- 22. TemplateBinding with Converter - có gì sai?
- 23. TemplateBinding từ một DataTrigger kiểu trong ControlTemplate
- 24. Thêm từ điển tài nguyên vào thư viện usercontrol trong wpf
- 25. Làm thế nào để sử dụng TwoWay ràng buộc từ bên trong một UserControl?
- 26. WPF Xaml Tuỳ chỉnh kiểu dáng đã chọn Kiểu trong một ListBox
- 27. UIElement vs FrameworkElement trong WPF/Silverlight
- 28. RelativeSource ràng buộc từ một ToolTip hoặc ContextMenu
- 29. DataContext như Nguồn Chuyển đổi Binding Trong Tài
- 30. WPF TabItem Tiêu đề Styling
nếu bạn cần Liên kết hai chiều, bạn phải sử dụng tùy chọn thứ hai –