2013-08-10 17 views
5

Tworzę prosty User Control w WPF, który zawiera TextBlock wewnątrz przycisku.UserControl Dependency Property czas projektowania

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

A także właściwość zależności "Tekst".

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)); 

} 

A potem używam UserControl tak:

<MyButton Text="Test" /> 

Problem polega na tym, że Visual Studio projektowe nie zmienia, ale to działa w czasie wykonywania.

Co jest nie tak?

Próbowałem też

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

Wewnątrz definicji UC, bez powodzenia.

Odpowiedz

4

Spróbuj użyć FrameworkPropertyMetadata zamiast PropertyMetadata, określając AffectsRender jak poniżej, a następnie restart Visual Studio:

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

MSDN Documentation o FrameworkPropertyMetadataOptions.AffectsRender mówi

jakiś aspekt renderingu lub skład układu (inne niż Measure lub ) wpływają zmiany wartości tej właściwości zależności.

W innych przypadkach, istnieją opcje, takie jak AffectsMeasure, AffectsArrange itp

+2

Great! W pierwszej chwili nie wydaje się to działać, więc zamykam i otwieram Visual Studio, a teraz działa dobrze. Wielkie dzięki. – Guilherme