2009-02-18 10 views
1

J'ai créé un contrôle personnalisé à l'aide Expression Blend:Comment créer des contrôles personnalisés dans Silverlight?

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    x:Class="MyProject.EditableField" 
    d:DesignWidth="286" d:DesignHeight="20"> 

    <Grid x:Name="LayoutRoot"> 
     <TextBlock HorizontalAlignment="Left" Width="95" Text="Label:" TextWrapping="Wrap" x:Name="Label" FontSize="12"/> 
     <TextBox Margin="99,0,0,0" x:Name="Value" Text="Value" TextWrapping="Wrap"/> 
    </Grid> 
</UserControl> 

Il contient une étiquette TextBlock et une valeur de TextBox. Ce que je voudrais ajouter est multiple de ceux-ci à mon XAML avec leur propre label et valeur, peut-être comme ceci:

<MyProject:EditableField Margin="30,180,0,0" Height="20" HorizontalAlignment="Left" VerticalAlignment="Top" Width="286" x:Name="FaxNumber"> 
      <Label> 
       <Text>Fax number:</Text> 
      </Label> 
      <Value> 
       <Contents> 
        111-222-333 
       </Contents> 
      </Value> 
     </MyProject:EditableField> 

Quand je dis peut-être, cela ne fonctionne pas bien. Quelle serait la syntaxe correcte pour les ajouter?

Répondre

2

La méthode la plus simple consiste à ajouter deux nouvelles propriétés au code, par exemple LabelText et ContentText. Connectez-les pour définir et obtenir les propriétés Text des contrôles TextBlock et TextBox respectivement.

Ensuite, vous utiliseriez:

<MyProject:EditableField LabelText="Fax number:" ContentText="111-222-333" ... 

La bonne méthode serait de faire la même chose, la mise en œuvre de deux propriétés de dépendance (et à soutenir ainsi l'animation, la liaison de données, etc.), et lier le texte de contrôle des contrôles enfants à ces propriétés.

+0

Merci un groupe, Chris :-) –

0

Dans le code sous-jacent:

public string LabelText 
{ 
    get { return Label.Text; } 
    set { Label.Text = value; } 
} 

public string ContentText 
{ 
    get { return Value.Text; } 
    set { Value.Text = value; } 
} 
Questions connexes