2011-01-07 24 views
11

Xem xét XAML sauNêu rõ các tài sản đi giữa mở và thẻ đóng trong XAML

<Grid> 
    <TextBox>Text</TextBox> 
    <Button>Content</Button> 
</Grid> 

Nó sẽ thiết lập các

  • chữ tài sản của một TextBox (chỉ WPF)
  • Thuộc tính nội dung của một nút
  • Thuộc tính trẻ em của lưới

Nhưng điều này được chỉ định như thế nào? Làm cách nào để bạn chỉ định Thuộc tính nào nằm giữa thẻ mở và đóng trong Xaml?
Điều này có được đặt bởi một số siêu dữ liệu trong Thuộc tính phụ thuộc hay không?

Cảm ơn

+1

đó là một câu hỏi hay, tôi cũng tự hỏi về điều đó. – VoodooChild

+0

Chỉ cần một điểm của thực tế bạn không thể thực sự làm điều đó với một 'TextBox'. – AnthonyWJones

+0

@AnthonyWJones: ' Văn bản' hoạt động tuyệt vời. Ý anh là gì? Nhìn vào TextBox.cs với Reflector tôi có thể thấy rằng có 'ContentProperty (" Text ")' –

Trả lời

17

ContentPropertyAttribute được áp dụng cho một lớp học. WPF/Silverlight sẽ sử dụng sự phản chiếu để xác định thuộc tính nào cần sử dụng.

Nếu bạn muốn làm điều này với một lớp tùy chỉnh, bạn có thể làm điều đó như vậy:

[ContentProperty("Bar")] 
public class Foo : Control 
{ 
    public static DependencyProperty BarProperty = DependencyProperty.Register(
     "Bar", 
     typeof(int), 
     typeof(Foo), 
     new FrameworkPropertyMetaData(0)); 

    public int Bar 
    { 
     get { return (int)GetValue(BarProperty); } 
     set { SetValue(BarProperty, value); } 
    } 
} 

Sau đó, bạn có thể xác định nó trong XAML như vậy:

<lcl:Foo>12</lcl:Foo> 

Cập nhật

Vì nó đang sử dụng sự phản chiếu, bạn không thực sự cần phải thực hiện DependencyProperty. Ví dụ: điều này cũng sẽ hoạt động:

[ContentProperty("Bar")] 
public class Foo : Control 
{ 
    public int Bar { get; set; } 
} 
+1

1, tuyệt vời! Hoàn thành ví dụ và tất cả, cảm ơn! –

+1

Các bit về 'ContentProperty' là chính xác tuy nhiên ít nhất trong Silverlight và WP7 tài sản quy định không cần phải là một tài sản phụ thuộc. Silverlight/WP7 chỉ sử dụng phản chiếu để tìm thuộc tính được chỉ định bởi thuộc tính 'ContentProperty' để thuộc tính nội dung có thể là bất kỳ thuộc tính nào có thể được phân tích cú pháp bằng Xaml. – AnthonyWJones

+0

@AnthonyWJones - Điểm tốt. Tôi đã cập nhật câu trả lời để cho thấy rằng bất kỳ thuộc tính nào đều có thể được sử dụng. –

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