2010-03-18 3 views
6

Je suis un débutant en Silverlight donc j'espère que je peux obtenir une réponse qui m'apporte plus de lumière dans le processus de mesure de Silverlight.Comment mesurer une toile qui a la hauteur et la largeur automatique

J'ai trouvé un contrôle d'abattement interessant de silverlight slide control et maintenant j'essaie de l'utiliser dans mon projet. Pour que la glissière fonctionne correctement, je dois placer le contrôle de l'utilisateur sur une toile. Le contrôle utilisateur utilise alors pour lui-même la hauteur de son contenu. Je veux juste changer ce comportement afin que la hauteur soit définie sur l'espace disponible de la toile parent.

Vous voyez le uxBorder où la hauteur est définie. Comment puis-je mesurer la hauteur réelle et la régler sur la bordure?

Je l'ai essayé avec Height={Binding ElementName=notificationCanvas, Path=ActualHeight} mais cette propriété de dépendance n'a pas de rappel, donc la valeur réelle n'est jamais définie.

Ce que je veux obtenir est un usercontrol comme le tweetboard par exemple sur Jesse Liberty's blog

Désolé pour mon anglais écrit, j'espère que vous comprenez ma question.

<Canvas x:Name="notificationCanvas" Background="Red"> 
      <SlideEffectEx:SimpleSlideControl GripWidth="20" GripTitle="Task" GripHeight="100"> 
       <Border x:Name="uxBorder" 
        BorderThickness="2" 
        CornerRadius="5" 
        BorderBrush="DarkGray" 
        Background="DarkGray" 
        Padding="5" Width="300" 
        Height="700" 
        > 
        <StackPanel> 
         <TextBlock Text="Tasks"></TextBlock> 
         <Button x:Name="btn1" Margin="5" Content="{Binding ElementName=MainBorder, Path=Height}"></Button> 
         <Button x:Name="btn2" Margin="5" Content="Second Button"></Button> 
         <Button x:Name="btn3" Margin="5" Content="Third Button"></Button> 
         <Button x:Name="btn1_Copy" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy1" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy2" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy3" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy4" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy5" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy6" Margin="5" Content="First Button"/> 
        </StackPanel> 
       </Border> 
      </SlideEffectEx:SimpleSlideControl> 

Répondre

1

Hey - deux choses:

  • Je devine que c'est juste une faute de frappe, mais: "{Reliure ElementName = MainBorder, Path = hauteur}" doit être " {Reliure ElementName = uxBorder, Path = Hauteur} »(ou ActualHeight)
  • Le SlideEffect semble définir une géométrie de pince, qui va affecter la façon dont "grand" il semble

    RectangleGeometry clipRect = new RectangleGeometry();

    clipRect.Rect = new Rect(0, 0, panel.ActualWidth, host.Height);

    host.Clip = clipRect;

Si vous commentez les lignes ci-dessus de la commande de diapositives, vous devriez voir un changement notable dans la taille du panneau semble.

1

Je pense que les propriétés ActualWidth ou ActualHeight ne sont pas paramétrables uniquement.

Pour cela, vous ne serez pas en mesure d'utiliser la liaison, peut-être si vous créez l'élément après le chargement de la page, car la taille réelle du canevas au moment de la création sera inconnue. Pourquoi ne pas essayer de créer une propriété pour cela, avec une liaison bidirectionnelle, et signer l'événement Canvas sur layoutUpdated et mettre à jour la valeur de la propriété, donc mettre à jour tous les objets dépendants.
Je ne sais pas si cet événement est le bon, par chèque si cela vous aide.