2013-08-10 11 views
5

Ich erstelle ein einfaches Benutzersteuerelement in WPF, das einen Textblock in einem Button enthält.UserControl Abhängigkeitseigenschaftsentwurfszeit

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

Und auch die "Text" Abhängigkeitseigenschaft.

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

} 

Und dann benutze ich die Usercontrol wie folgt aus:

<MyButton Text="Test" /> 

Das Problem ist, dass die Visual Studio-Design ändert sich nicht, aber es funktioniert in der Laufzeit.

Was ist los?

Ich habe auch versucht

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

Innerhalb der UC Definition, ohne Erfolg.

Antwort

4

Versuchen FrameworkPropertyMetadata statt PropertyMetadata verwenden, AffectsRender wie unten spezifiziert, dann Neustart Visual Studio:

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

MSDN Documentation über FrameworkPropertyMetadataOptions.AffectsRender sagt

Einige Aspekt Rendering oder Layout Zusammensetzung (ausgenommen measure oder arrange) wird durch Wertänderungen dieser Abhängigkeitseigenschaft beeinflusst.

Für andere Fälle gibt es Optionen wie AffectsMeasure, AffectsArrange usw.

+2

Great! Im ersten Moment scheint dies nicht zu funktionieren, also schließe und öffne ich Visual Studio und es funktioniert jetzt gut. Danke vielmals. – Guilherme