2013-08-10 18 views
5

Sto creando un semplice controllo utente in WPF che contiene un TextBlock all'interno di un pulsante.UserControl Dipendenza Proprietà tempo di progettazione

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

E anche la proprietà di dipendenza "Testo".

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

} 

E allora io uso l'UserControl come questo:

<MyButton Text="Test" /> 

Il problema è che lo Studio di progettazione di Visual non cambia, ma funziona in fase di esecuzione.

Cosa c'è che non va?

Ho anche provato

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

all'interno della definizione di UC, senza successo.

risposta

4

Provate ad usare FrameworkPropertyMetadata invece di PropertyMetadata, specificando AffectsRender come qui di seguito, quindi riavvio Visual Studio:

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

MSDN Documentation circa FrameworkPropertyMetadataOptions.AffectsRender dice

Alcuni aspetti della rendering o composizione del layout (diverso da misura o organizzare) è influenzato dalle modifiche di valore a questa proprietà di dipendenza.

Per gli altri casi, ci sono opzioni come AffectsMeasure, AffectsArrange, ecc

+2

Grande! Al primo momento, questo non sembra funzionare, quindi chiudo e apro Visual Studio e ora funziona perfettamente. Grazie molto. – Guilherme

Problemi correlati