J'applique actuellement une classe appelée SelectionBorder dans WPF. C'est dérivé de la classe Shape.Création de SelectionBorder: Bit dans le visage par arrondi décimal?
Il ressemble fondamentalement ceci:
public class SelectionBorder : Shape
{
public Point StartPoint {get; set;}
public PointCollection Points {get; set;}
public double StrokeLength {get; set;}
protected override Geometry DefiningGeometry{
get{
//Magic!
}
}
}
Le StartPoint et les points propriétés déterminent les coins de la frontière. La bordure est une bordure de trait typique (un trait noir, un trait invisible comme celui-ci: - - - -)
Le problème que j'ai maintenant est que puisque les points d'angle sont librement choisis, il est assez commun que le nombre de les traits (signifiant des traits noirs et invisibles) ne sont pas pairs (en fait, ils ne sont même pas des nombres entiers) et, par conséquent, le premier trait semble plus long que les autres (visible sur l'image). Cela peut ne pas sembler être un gros problème mais je veux plus tard animer la bordure de sorte que les traits entourent le contenu. Lorsque vous faites cette animation, la petite faille dans la vue statique devient clairement visible et, à mon avis, est très dérangeante.
alt text http://img14.imageshack.us/img14/2874/selectionborder.png
Le problème est que j'ai essayé de déterminer une longueur de course qui obtient aussi près du original que possible longueur de course et crée un nombre pair de coups. Cependant le problème que j'ai rencontré est que WPF (évidemment) ne peut pas afficher toute la précision d'un StrokeLength double décimal et donc le nombre de traits qui en résulte est encore une fois inégal.
Y a-t-il une solution de contournement pour ce problème? Avez-vous probablement une autre solution pour mon problème?
Merci d'avance!
EDIT: J'ai testé et revu le code après une petite pause pour la forme physique aujourd'hui et après tout, il arrive seulement sur de très gros StrokeLengths. Je prévois d'utiliser StrokeLengths de 2 où le petit saut d'animation importe beaucoup moins que ce que je pensais à l'origine.
Vous où j'avais raison peut-être un peu à pointilleux. Le conseil avec 2 points de départ est également très bon. Merci! – chrischu