2009-01-29 12 views
1

Je ne pense pas que ce soit tout à fait possible, mais ça vaut le coup de voir ce que vous dites. J'essaie de créer un bouton demi-elliptique en C# (pas XAML, cela pourrait passer par une autre courbe). Si je voulais une taille prédéterminée pour les boutons, je voudrais juste utiliser des images ou quelque chose comme ça, mais ce n'est pas le cas puisque la taille change. Voici plus en détail:WPF: Créer un bouton demi-elliptique

  1. j'ai une ellipse avec x-y-rayon et le rayon (ou la largeur et la hauteur, respectueusement multipliée par 2).

  2. Je veux deux boutons pour remplir l'ellipse entière, chacun occupant la moitié de l'ellipse.

  3. Je ne veux pas de bouton rectangulaire qui s'étend au-delà de l'ellipse et se clippé au parent, je veux des boutons elliptiques réels, sauf seulement la moitié d'une ellipse par bouton.

  4. Si cela ne peut pas être accompli en utilisant les boutons, mais en utilisant un autre contrôle, alors je voudrais que ce contrôle puisse agir comme un bouton.

Toute aide ou conseil ou pointeurs aiderait grandement.

Répondre

4

Avant de répondre à cette question, j'aimerais savoir pourquoi vous devez éviter XAML, dans une application WPF? Il est presque certain que vous utiliserez indirectement XAML, alors pourquoi ne pas l'utiliser - faire de votre bouton un morceau de gâteau! C'est exactement pour ça! C'est comme essayer de faire une maison avec du ruban adhésif lorsque vous êtes debout à côté de briques et de mortier! :)

+0

La taille de l'ellipse globale change. Dites à quelqu'un de mettre une ligne de code comme myEllipse.xRadius = 40; La largeur de chaque bouton devient 40 essentiellement au centre de la plupart du bouton. Si quelque chose comme ça fonctionnait en utilisant du XAML pur, alors cela fonctionnerait. – Nick

+0

OUI! Ça marcherait. XAML est très bon pour cette mise en page. Vous pouvez très facilement le faire, juste exposer une propriété Radius, puis dans l'ensemble, appliquez radius * 2 à la largeur de votre contrôle de base et le contrôle sera automatiquement redimensionné si vous l'avez configuré correctement! :) –

+0

Bon, alors comment aurais-je deux boutons pour faire une forme elliptique, pas nécessairement un objet ellipse? Et puis, lorsque la taille de forme d'ellipse souhaitée change, les boutons changent en conséquence. – Nick

0

Vous devrez ajouter des déclencheurs supplémentaires (comme IsPressed), mais cela devrait vous donner une assez bonne idée:

<Button Height="30" Width="30"> 
    <Button.Style> 
     <Style TargetType="{x:Type Button}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Path Name="HalfEllipse" Stroke="Black" StrokeThickness="1" Fill="Blue"> 
          <Path.Data> 
           <PathGeometry> 
            <PathFigure IsFilled="True" StartPoint="0,0"> 
             <PolyBezierSegment Points="5,30 25,30 30,0" /> 
            </PathFigure> 
           </PathGeometry> 
          </Path.Data> 
         </Path> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter TargetName="HalfEllipse" Property="Fill"> 
            <Setter.Value> 
             <SolidColorBrush Color="Green"/> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Button.Style> 
</Button> 

Voir Pour plus d'infos: http://www.codeproject.com/KB/WPF/glassbuttons.aspx

Questions connexes