Aller au contenu

Manu.Net

Membres
  • Compteur de contenus

    33
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par Manu.Net

  1. Merci Gile, ça m'a été bien utile, notamment la 2ème vidéo sur les modèles de projet que je ne connaissais pas. Tes vidéos sont très claires, il y a juste un petit souffle au niveau du son, mais celui-ci n'empêche pas la compréhension.
  2. Oups, mauvais post, désolé
  3. Merci Gile, c'est ce que j'ai fait du coup
  4. Bonjour à tous, Je suis en train de travailler sur la gestion des thèmes Light et Dark en WPF à l'aide de fichiers de ressources XAML contenant (à termes) les styles et templates correspondant aux thèmes Light et Dark d'AutoCAD. Les thèmes seront liés à la variable système COLORTHEME afin d'avoir une UI qui s'adapte en temps réel à la modification du thème. Le tout sera géré par une classe de service ThemeManager, qui sera utilisable en MVVM via du binding. J'ai actuellement une petite problématique concernant les fichiers de ressources : Lors de développement d'une application WPF complète, on peut affecter un ou plusieurs fichiers de ressource directement à l'application via Application.Current.Resources, ceux-ci s'appliquant ensuite à toutes les fenêtres de l'application. Mais vu que l'on développe un plugin AutoCAD, c'est à dire une Assembly seule, est-ce que vous savez si il existe l'équivalent pour affecter des fichiers de ressources au niveau de l'assembly afin que ceux-ci s'appliquent à toutes les palettes et autres fenêtres WPF directement ? Ou alors faut t-il modifier la propriété Resources de chaque Palette ou fenêtre une par une ? J'espère que c'est assez clair, je partagerai mon travail avec vous dès que j'aurai un peu plus avancé. Merci, Manu
  5. Je me doutais de ta réponse vu tes compétences, mais c'était au cas où, ça peut peut-être servir à d'autres... Tout à fait d'accord sur le fait que ce ne soit pas une entorse au MVVM, c'était juste pour le plaisir de ne rien laisser dans le code behind
  6. Oui le binding est vraiment très puissant ! Pour terminer on peut aussi supprimer le code behind restant (Instanciation ViewModel + Affectation DataContext) en le mettant dans le Xaml : <UserControl x:Class="AcadUISample.PaletteWpf.PaletteTabView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:AcadUISample.PaletteWpf" mc:Ignorable="d" d:DesignHeight="140" d:DesignWidth="250"> <UserControl.DataContext> <local:PaletteTabViewModel /> </UserControl.DataContext> ... Du coup, plus de code behind ! : using System.Windows.Controls; namespace AcadUISample.PaletteWpf { /// <summary> /// Logique d'interaction pour PaletteTabView.xaml /// </summary> public partial class PaletteTabView : UserControl { public PaletteTabView() { InitializeComponent(); } } } Je suis aussi tombé sur un petit bug lorsqu'on a des calques dont les noms contiennent un espace, il faut rajouter des guillemets à ta méthode DrawCircle : private void DrawCircle() => AcAp.DocumentManager.MdiActiveDocument?.SendStringToExecute( $"CMD_CIRCLE_WPF \"{((INamedValue)Layer).Name}\" {TextRadius} ", false, false, false); A+, Manu
  7. J'ai trouvé le moyen de faire fonctionner le binding pour les carrés de couleur sans utiliser de code behind : Modif dans PaletteTabView.xaml : <Rectangle Grid.Column="0" Margin="3" VerticalAlignment="Stretch" Width="{Binding Path=ActualHeight, RelativeSource={RelativeSource Self}}" Stroke="Black" StrokeThickness="0.5" Fill="{Binding Color, Converter={StaticResource colorConverter}}"/> Et le LayerColorConverter modifié : using System; using System.ComponentModel; using System.Globalization; using System.Windows.Data; using System.Windows.Media; namespace AcadUISample.PaletteWpf { /// <summary> /// Fournit la méthode de conversion pour obtenir la couleur du calque /// </summary> [ValueConversion(typeof(Autodesk.AutoCAD.Colors.Color), typeof(SolidColorBrush))] class LayerColorConverter : IValueConverter { /// <summary> /// Convertit une couleur Autodesk.AutoCAD.Colors.Color en SolidColorBrush /// </summary> /// <param name="value">Couleur Autodesk.AutoCAD.Colors.Color à convertir.</param> /// <param name="targetType">Type SolidColorBrush</param> /// <param name="parameter">Non utilisé.</param> /// <param name="culture">Non utilisé.</param> /// <returns>Instance de SolidColorBrush représentant la couleur du calque.</returns> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value != null && value is Autodesk.AutoCAD.Colors.Color) { var acadColor = (Autodesk.AutoCAD.Colors.Color)value; var drawingColor = acadColor.ColorValue; var mediaColor = Color.FromRgb(drawingColor.R, drawingColor.G, drawingColor.B); return new SolidColorBrush(mediaColor); } return null; } /// <summary> /// Méthode de conversion inverse non utilisée. /// </summary> /// <returns>Toujours null</returns> public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } } } [/Code] Du coup moins de code behind dans PaletteTabView.xaml.cs : [Code] using System.Windows.Controls; namespace AcadUISample.PaletteWpf { /// <summary> /// Logique d'interaction pour PaletteTabView.xaml /// </summary> public partial class PaletteTabView : UserControl { public PaletteTabView() { InitializeComponent(); // définit la liaison de données avec la partie ViewModel var vm = new PaletteTabViewModel(); DataContext = vm; } } } [/Code] ;)
  8. Quel boulot ! Merci pour le partage ;)
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité