2010-10-07 6 views
1

J'ai un tas de zones de texte sur une page XAML que je voulais de la même taille. J'ai créé un modèle de contrôle et mis dans la section Grid.Resources de la pageL'application de ControlTemplate à Textbox provoque l'effacement du texte. (Silverlight)

<Grid.Resources> 
    <ControlTemplate x:Key="basicTextbox" TargetType="TextBox" > 
     <TextBox MinWidth="200" /> 
    </ControlTemplate> 
</Grid.Resources> 

et je l'appliquer à une zone de texte comme ce qui suit:

<TextBox x:Name="txtNewSec1" Template="{StaticResource basicTextbox}"/> 

J'ai un bouton qu'un utilisateur peut appuyez sur et dans le code derrière je prends le texte que l'utilisateur a entré et l'applique à un objet. J'ai été surpris chaque fois que le texte revenait vide lorsque le texte était dans la zone de texte. Après avoir supprimé le modèle de la zone de texte et cliqué à nouveau sur le bouton, le texte est disponible par magie pendant le gestionnaire d'événements click du bouton. Y at-il quelque chose que je dois définir dans le ControlTemplate pour permettre à la zone de texte d'avoir du texte pendant les événements code-behind? Ou est-ce une sorte de bug dans Silverlight?

Répondre

3

Vous ne devriez pas utiliser un modèle de contrôle pour atteindre que veux-tu faire. Qu'est-ce que vous avez besoin est ... style (Tada)

<Grid.Resources> 
    <Style x:Key="basicTextBox" TargetType="TextBox"> 
    <Setter Property="MinWidth" Value="200"/> 
    </Style> 
</Grid.Resources> 

et:

<TextBox x:Name="txtNewSec1" Style="{StaticResource basicTextbox}"/> 
+0

Correct, juste 60 secondes trop tard. Josh a pensé que l'un d'eux :) +1 pour bien faire les choses. –

+0

Oui, je l'ai vu quand j'ai envoyé la réponse ... trop tard. ;) Mais mieux deux fois que non. Merci – Eilistraee

0

Il semblait étrange que vous ayez un TextBox dans le modèle d'un TextBox.

Cela ne crée-t-il pas un second TextBox dans le premier?

Lorsque je maquille votre exemple et que vous affectez une valeur de texte à la zone de texte de modèle, elle s'affiche immédiatement, alors que toute valeur de texte dans l'instance ultérieure ne fait rien.

+0

Je pensais que moi-même .... Je pense que je dois regarder setters propriété – Josh

1

Changé à un style et il semble fonctionner:

<Style x:Key="basicTextbox" TargetType="TextBox" > 
    <Setter Property="MinWidth" Value="200" /> 
</Style> 

et sur la zone de texte changé « modèle » à « Style »

<TextBox x:Name="txtNewSec1" Style="{StaticResource basicTextbox}" /> 
+0

C'était ma prochaine suggestion . Cela fera ce que tu veux. +1 pour le résoudre vous-même :) –

Questions connexes