Je travaille avec les contrôles InkCanvas
et InkToolbar
et j'ai un petit problème d'interface utilisateur chaque fois que je mets à jour les attributs d'encrage actuels pour le canevas.InkToolbar UI désynchronisé avec la cible InkCanvas lors de la mise à jour de InkDrawingAttributes
Disons que je ces deux contrôles dans une page:
<InkToolbar TargetInkCanvas="{x:Bind DrawingCanvas}"/>
<InkCanvas x:Name="DrawingCanvas"/>
Et puis dans le gestionnaire d'événements Loaded
de la page que je quelque chose comme ceci pour définir les attributs d'encrage initial:
// Update the attributes
InkDrawingAttributes attributes = new InkDrawingAttributes
{
PenTip = PenTipShape.Circle,
Color = Colors.Red,
// And so on...
};
DrawingCanvas.InkPresenter.UpdateDefaultDrawingAttributes(attributes);
L'outil utilisé est correctement modifié. Par exemple, si je définis les attributs pour utiliser un surligneur jaune, lorsque je commence à dessiner, j'utilise un surligneur comme prévu.
Mais, la question est que l'interface utilisateur du contrôle InkToolbar est pas mis à jour, et il montre encore l'outil par défaut que celui utilisé (la couleur utilisée pour le surligneur est pas mis à jour non plus, donc si j'initialise les attributs avec un surligneur orange, la barre d'outils affichera toujours la couleur jaune par défaut).
Est-ce intentionnellement ou est-ce un bug dans le contrôle? Je ne vois pas un moyen de définir explicitement le InkDrawingAttributes
dans la barre d'outils, car cette propriété est en lecture seule (et définir manuellement ses propriétés imbriquées ne semble pas affecter l'interface utilisateur de la barre d'outils de toute façon).
EDIT: depuis la InkToolbar
ne met pas à jour son interface utilisateur lorsque les attributs du changement de contrôle cible InkCanvas
, je suis venu avec ce code pour essayer pour résoudre le problème:
// Assume I already have the "attributes" variable with my desired settings
InkToolbarTool tool;
if (attributes.DrawAsHighlighter) tool = InkToolbarTool.Highlighter;
else tool = attributes.Kind == InkDrawingAttributesKind.Default ? InkToolbarTool.BallpointPen : InkToolbarTool.Pencil;
InkToolbarToolButton button = Toolbar.GetToolButton(tool);
Toolbar.ActiveTool = button;
Maintenant, le bouton droit est sélectionné correctement, mais je n'ai toujours aucun moyen de définir une taille/couleur de crayon spécifique. Je n'utiliserai qu'une couleur qui est réellement présente dans la palette d'origine, c'est pourquoi je ne m'inquiète pas de ce qui pourrait arriver si j'essayais de définir une couleur qui n'est pas prédéfinie dans le contrôle InkToolbar
. En fin de compte, je veux juste enregistrer/restaurer les paramètres de dessin d'encre de l'utilisateur entre différentes sessions, et je voudrais que l'interface utilisateur du InkToolbar
le suive également. Y a-t-il un moyen de le faire ou dois-je me contenter de choisir le bon bouton d'outil (avec la couleur/taille désynchronisée)?
Merci pour votre aide!
il y a un problème dans votre code édité , 'DrawingCanvas.InkPresenter.UpdateDefaultDrawingAttributes (attributs); 'devrait être appelé _after_' Toolbar.ActiveTool = button; ', de sorte que l'attribut de dessin ne soit pas écrasé à nouveau. – kennyzx
@kennyzx Ouais je sais que, les deux extraits de code dans ma question ne doivent pas être considérés comme ordonnés, j'ai ajouté le deuxième après avoir posté la question initiale. J'utilise actuellement le second extrait pour au moins mettre le bon bouton dans le 'InkToolbar', puis le code dans le premier snippet pour charger le' InkDrawingAttributes' que je veux utiliser. – Sergio0694