2013-08-10 30 views
5

Tôi đang tạo một User Control đơn giản trong WPF có chứa một TextBlock bên trong một Button.UserControl Dependency Property design time

<UserControl x:Class="WpfExpansion.MyButton"..... > 
    <Grid > 
     <Button Background="Transparent" > 
      <TextBlock Text="{Binding Path=Text}"/> 
     </Button> 
    </Grid> 
</UserControl> 

Và cũng là thuộc tính phụ thuộc "Văn bản".

public partial class MyButton : UserControl 
{ 
    public MyButton() 
    { 
     InitializeComponent(); 
     this.DataContext = this;   
    } 

    public string Text 
    { 
     get { return (string)GetValue(TextProperty); } 
     set { SetValue(TextProperty, value); } 
    } 
    public static readonly DependencyProperty TextProperty = 
     DependencyProperty.Register("Text", typeof(string), typeof(MyButton), new PropertyMetadata(string.Empty)); 

} 

Và sau đó tôi sử dụng UserControl như thế này:

<MyButton Text="Test" /> 

Vấn đề là các Studio thiết kế trực quan không thay đổi, nhưng nó hoạt động trong thời gian chạy.

Điều gì là sai?

Tôi cũng đã cố gắng

DataContext="{Binding RelativeSource={RelativeSource Self}}" 

Bên trong định nghĩa UC, nhưng không thành công.

Trả lời

4

Hãy thử sử dụng FrameworkPropertyMetadata thay vì PropertyMetadata, quy định cụ thể AffectsRender như dưới đây, sau đó restart Visual Studio:

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", typeof(string), typeof(MyButton), 
     new FrameworkPropertyMetadata(string.Empty, 
      FrameworkPropertyMetadataOptions.AffectsRender)); 

MSDN Documentation về FrameworkPropertyMetadataOptions.AffectsRender nói

Một số khía cạnh của render hoặc thành phần bố cục (trừ đo lường hoặc sắp xếp) bị ảnh hưởng bởi các thay đổi giá trị đối với thuộc tính phụ thuộc này.

Đối với các trường hợp khác, có những lựa chọn như AffectsMeasure, AffectsArrange vv

+2

Tuyệt vời! Lúc đầu, điều này dường như không hoạt động, vì vậy tôi đóng và mở Visual Studio và nó bây giờ làm việc tốt. Cảm ơn nhiều. – Guilherme