2011-06-20 7 views
1

Je veux créer un FilterControl dans Silverlight: [Légende] [TextBox] [bouton Effacer]FilterControl - Contrôle utilisateur personnalisé?

Je voudrais créer comme un contrôle styleabel, avec la fonctionnalité du bouton clair (je ne veux pas laissez-le aux autres développeurs), et avec les propriétés (Caption, FilterText). Mais pour autant que je sache et vois, le premier est un contrôle personnalisé, le deuxième et le troisième sont des capacités de contrôle de l'utilisateur.

Est-il possible de créer quelque chose, comme ça?


Voici le code du CC:

<!-- Built-In Style for FilterControl --> 
<Style TargetType="Controls:FilterControl"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <!-- ControlTemplate --> 
      <ControlTemplate TargetType="Controls:FilterControl"> 
       <!-- Template's Root Visual --> 
       <Grid x:Name="LayoutRoot"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="{TemplateBinding Height}"/> 
        </Grid.RowDefinitions> 

        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 

         <!--FilterCaption PART--> 
         <TextBlock x:Name="FilterCaptionTextBlock" Text="{TemplateBinding FilterCaption}" VerticalAlignment="Center" /> 

         <!--FilterTextBox PART--> 
         <TextBox x:Name="FilterTextBox" 
           HorizontalAlignment="Center" Text="{Binding FilterText, Mode=TwoWay}" IsEnabled="{Binding IsEnabled}" VerticalAlignment="Center" /> 
         <!--<TextBox x:Name="FilterTextBox" 
           HorizontalAlignment="Center" Text="{TemplateBinding FilterText}" IsEnabled="{Binding IsEnabled}" VerticalAlignment="Center" />--> 

         <!--ClearFilterTextButton PART--> 
         <Button x:Name="ClearFilterTextButton" 
           Content="X" IsEnabled="{TemplateBinding IsEnabled}" VerticalAlignment="Center" /> 

        </StackPanel> 

        <!--VisualStateManager--> 
        <VisualStateManager.VisualStateGroups> 
         ... 
        </VisualStateManager.VisualStateGroups> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Répondre

1

D'abord laisse clairement tout FrameworkControl y compris un UserControl peuvent être coiffés mais je soupçonne que ce que vous pouvez référenceurs à est la capacité de remplacer le modèle du contrôle. Le nécessite un contrôle personnalisé basé sur un modèle.

La réponse à votre question est: oui bien sûr que oui.

Vous créez un contrôle de modèle personnalisé, avec le modèle par défaut que vous préférez. Ajoutez les propriétés de dépendance pour Caption et FilterText.

Utilisez TemplateBinding pour connecter le texte Captiona et Filter aux éléments du modèle par défaut. Vous devez spécifier votre modèle nécessite un TemplatePart de type TextBox.

Vous écrirez du code pour surveiller les modifications dans la zone de texte afin que le contrôle met à jour sa propriété Filter.

+0

C'est clair, je dois créer un contrôle personnalisé. Mais: 1. Qu'y a-t-il avec le bouton Clear? Parce qu'il n'y a pas de xaml dans l'UC, donc je ne peux pas atteindre le bouton, et je ne peux pas y ajouter un eventhandler. 2. la liaison bidirectionnelle n'a pas fonctionné avec ces propriétés – Aaaaaaaa

Questions connexes