Je souhaite personnaliser l'apparence du WPF de base tickbar code>
. Je me demandais s'il y avait un moyen simple de faire cela à l'aide d'un modèle de contrôle: p>
Je souhaite avoir des chiffres à la place des tiques le long de la barre de ticket. Je veux que la position du nombre correspondre à la valeur d'un curseur (un peu comme l'image dans le lien). p>
J'ai cherché autour de moi et une suggestion que j'ai trouvée a dit de créer une classe qui hérite de Je préférerais beaucoup trouver une solution qui n'implique pas cela. J'espérais vraiment que l'utilisation d'un modèle de contrôle ferait le tour. Donc, s'il y a une telle solution, des suggestions seraient grandement appréciées! :) p> tickbar code> et de remplacer son
tinrender code> méthode. p>
3 Réponses :
Voici 2 solutions rapides et faciles qui font le travail mais ne doivent pas être considérées comme des meilleures pratiques: p>
Un correctif super rapide serait de définir la propriété AutotooltiPplacemant sur le curseur sur townright. Cela signifie que les numéros apparaîtront dans une info-bulle lorsque vous faites glisser le curseur. P>
Option 2 consiste à éditer une copie du modèle de contrôle p>
Créez simplement quelques Il y a un moyen approprié de résoudre ce problème, mais si vous en avez besoin de cela rapidement et que vous ne pouvez pas vous inquiéter de commencer à remplacer l'onRender ou de faire une nouvelle commande de ces manières d'obtenir le travail plus rapidement. P>
(L'auteur de ce poste de réponse ne présente aucunement à l'indigence de pratiques de codage sleazy ou n'utilisez pas ces techniques comme substitut de la manière appropriée de le faire dans son logiciel: ils ne sont que des corrections rapides): -) p> textblock code> S avec vos valeurs. Cette méthode est incroyablement Ramshakle et que vous ne devez l'utiliser que si vous souhaitez utiliser le curseur spécial une fois. De plus, les numéros ne mettent pas à jour si vous modifiez les propriétés maximales et minimales sur le curseur. p>
Merci pour les suggestions. Bien que je pense que je vais les éviter pour le moment. :) On dirait que onRender code> est la meilleure option.
D'accord, j'ai une solution. Je pensais que je devrais répondre à ma question dans l'événement, certains autres membres du long de la ligne courent dans la même situation que moi.: -)
Supprimer simple, et il a besoin de quelques têtes pour le rendre plus flexible, voici ma version: p> OnRender code> semble être la solution la plus évidente. J'espérais vraiment utiliser un modèle de tri ... soupir em> ... ah bien. Quoi qu'il en soit, j'ai couru sur Cette discussion sur les forums de MSDN qui ont fourni une réponse à m'envoyer dans la bonne direction. p>
Explication de la raison pour laquelle onRender code> est mon meilleur pari: social.msdn.microsoft.com/forums/en-us/wpf/thread/... Fondamentalement, TickBar utilise le bas niveau
OnRender Code> mécanisme de présentation de ses visuels.
public class CustomTickBar:TickBar { protected override void OnRender(DrawingContext dc) { Size size = new Size (base.ActualWidth,base.ActualHeight); int tickCount = (int)((this.Maximum - this.Minimum) / this.TickFrequency)+1; if ((this.Maximum - this.Minimum) % this.TickFrequency == 0) tickCount -= 1; Double tickFrequencySize; // Calculate tick's setting tickFrequencySize = (size.Width * this.TickFrequency / (this.Maximum - this.Minimum)); string text = ""; FormattedText formattedText = null; double num = this.Maximum - this.Minimum; int i = 0; // Draw each tick text for (i = 0;i <= tickCount;i++) { text = Convert.ToString (Convert.ToInt32 (this.Minimum + this.TickFrequency * i),10); //g.DrawString(text, font, brush, drawRect.Left + tickFrequencySize * i, drawRect.Top + drawRect.Height/2, stringFormat); formattedText = new FormattedText (text,CultureInfo.GetCultureInfo ("en-us"),FlowDirection.LeftToRight,new Typeface ("Verdana"),8,Brushes.Black); dc.DrawText (formattedText,new Point ((tickFrequencySize * i),30)); } } }