Hãy xem xét các tập tin XAML sau:Tại sao x: chìa khóa yêu cầu trên ControlTemplate trong ResourceDictionary
<Window x:Class="ExpressionVisualizer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sle="clr-namespace:System.Linq.Expressions;assembly=System.Core"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type sle:BinaryExpression}"/>
<ControlTemplate TargetType="{x:Type ContentControl}"/>
</Window.Resources>
</Window>
này được đưa ra lỗi biên dịch sau:
All objects added to an IDictionary must have a Key attribute or some other type of key associated with them. Line 10 Position 10.
Nếu tôi thêm một thuộc tính x:key
đến ControlTemplate, nó biên dịch. Tuy nhiên, tôi không phải làm vậy. ControlTemplate được trang trí với thuộc tính DictionaryKeyProperty, chỉ định TargetType là thuộc tính khóa. Vì vậy, miễn là tôi chỉ định TargetType cho ControlTemplate của mình, tôi nên không phải phải chỉ định khóa rõ ràng (tương tự như cách tôi không phải chỉ định một khóa trên DataTemplate mà tôi đã xác định).
Tôi có câu hỏi thứ hai và liên quan đến tiếp tuyến. Nếu tôi định nghĩa một ControlTemplate theo cách này (hoặc chỉ định một khóa hay không) trong XAML, nó sẽ tự động áp dụng cho tất cả các điều khiển kiểu ContentControl không chỉ định một mẫu khác, hay tôi phải nhúng ControlTemplate bên trong một Style để điều đó xảy ra?
Điều đó trả lời phần thứ hai của câu hỏi của tôi. Tôi biết tôi cần phải chỉ định một x: Key nếu tôi muốn tham khảo các mẫu ở nơi khác trong tài liệu, nhưng bỏ qua nó không nên gây ra một lỗi biên dịch. – luksan
Tôi đã cập nhật câu trả lời của mình. Nó seams 'DictionaryKeyProperty' là không làm những gì nó phải là ... – nemesv
Vấn đề với DictionaryKeyProperty xuất hiện không ảnh hưởng đến tất cả các loại, vì thuộc tính hoạt động như được chỉ định trên DataTemplate. Vấn đề Connect là từ năm 2009. Tôi đoán tôi sẽ chỉ viết điều này như là một điều khác trong WPF mà không hoạt động và chưa bao giờ được kiểm tra kỹ lưỡng. Mỗi khi tôi cố gắng phát triển một cái gì đó trong WPF, tôi chạy vào các loại vấn đề này. Điều này không bao giờ xảy ra với Windows Forms, mọi thứ chỉ hoạt động. Tôi thực sự nghĩ (có lẽ là mơ ước) rằng họ sẽ làm cho WPF dễ dự đoán hơn/có thể sử dụng được trong bản phát hành 4.0. – luksan