4

Ich benutze die Extended WPF Toolkit Community Edition v2.6 von NuGet in meinem Projekt, aber ich weiß nicht, ob ich etwas mehr tun sollte, um mich zu theme oder passen Sie eine Kontrollschablone an.Wie kann ich Blend oder VS Designer verwenden, um Standard-Style-Vorlage für WPF PropertyGrid zu bearbeiten

Nach Designern/Cuvee bitten, eine Kopie der bestehenden Standardvorlage für die Property Steuerelement zu erstellen, ist die UI gebrochen. Die Vorlage sieht korrekt aus, funktioniert jedoch nicht mehr zur Entwurfszeit oder zur Laufzeit.

enter image description here

Nach der Auswahl der Standardvorlage in eine neue Styles zu kopieren:

Image http://i63.tinypic.com/2pt59oi.png

Gibt es einen einfachen Weg, um die integrierten Stile für dieses Steuerelement zu bearbeiten? Ich versuche wirklich nur die Vordergrund-/Hintergrundfarben der Editoren/Labels des PropertyGrids zu überschreiben.

Ich habe einige manuelle Stossen in der XAML mit begrenztem Erfolg versucht: „Copy-Art fehlgeschlagen“

<Style TargetType="{x:Type xctk:DropDownButton}"> 
    <Setter Property="Background" Value="Black"/> 
    <Setter Property="Foreground" Value="White"/> 
</Style> 
<Style TargetType="{x:Type xctk:CustomPropertyItem}"> 
    <Setter Property="Background" Value="Black"/> 
    <Setter Property="Foreground" Value="White"/> 
</Style> 
<Style TargetType="{x:Type xctk:PropertyGridEditorCollectionControl}"> 
    <Setter Property="Background" Value="Black"/> 
    <Setter Property="Foreground" Value="White"/> 
</Style> 

Wenn eine Eigenschaft Container Stil zu schaffen versucht, durch die Standard-Kopieren, erhalte ich die Fehler in VS Designer oder Blend.

enter image description here

Ergebnisse in dieser:

Error from Copy Style

Ich habe manuell einschließlich der generic.xaml von der Xceed Toolkit Montage versucht, aber es das Problem nicht behoben ist.

Ich habe versucht, zwei Möglichkeiten, die Ressource verweisen:

<ResourceDictionary Source="/Xceed.Wpf.Toolkit;component/themes/generic.xaml" /> 

<ResourceDictionary Source="pack://application:,,,/Xceed.Wpf.Toolkit;component/Themes/generic.xaml"> 

Hier ist der Stack-Trace vom Designer, wenn ich versuche, die PropertyContainerStyle einzustellen:

stack trace

+0

Was war falsch an den Stilen, die Sie versucht haben (die "Ich habe versucht, einige manuelle stochern in der XAML mit begrenztem Erfolg"). Hat es nicht funktioniert? Hat es andere Dinge überschrieben? – FriendlyGuy

+0

Der obige Screenshot zeigt, was passiert ist, nachdem ich versucht habe, den Stil zu erstellen. Das gesamte Steuerelement wurde auf nur einen Balken reduziert, als wäre die Objektgruppe leer. Ich habe gefunden, dass ich das generic.xaml manuell einschließen sollte, aber es half meiner Situation nicht. Ich kann dieses PropertyGrid immer noch nicht formatieren. –

+0

Welche Version von VS verwenden Sie? In * VS Professional 2015 mit Update 1 * Erstellen einer Kopie einer Standardvorlage, die auf beide beschriebene Weise funktioniert (entweder mit "Vorlage bearbeiten" und "Zusätzliche Vorlagen bearbeiten"), ohne die Benutzeroberfläche zu beschädigen. Ich benutze das gleiche Toolkit v2.6, aber ohne nugget (nur heruntergeladene und referenzierte Bibliotheken). Aber beachte - für diese Tests habe ich nur ein leeres 'PropertyGrid' erstellt. Ich kann generierte Vorlagen teilen, wenn Sie benötigen. – Sam

Antwort

0

die komplette PropertyGrid Um 's Contol-Vorlage direkt von Xceed.Wpf.Toolkit.dll können Sie versuchen, diesen Code in jeder WPF-Anwendung zu verwenden (Hinweis, die Sie müssenhabenüberall in Ihrem XAML für dieses Beispiel) zu arbeiten:

 var type = Assembly.LoadFile(@"C:\path\to\file\Xceed.Wpf.Toolkit.dll") 
      .GetType("Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid"); 

     // Instantiate the type. 
     var info = type.GetConstructor(Type.EmptyTypes); 
     var control = (Control)info.Invoke(null); 

     // Add it to the grid (but keep it hidden). 
     control.Visibility = Visibility.Collapsed; 
     this.RootGrid.Children.Add(control); 

     // Get the template. 
     var template = control.Template; 

     // Get the XAML for the template. 
     var settings = new XmlWriterSettings(); 
     settings.Indent = true; 
     var sb = new StringBuilder(); 
     var writer = XmlWriter.Create(sb, settings); 
     XamlWriter.Save(template, writer); 

     // Display the template any appropriate way. 
     Trace.Write(sb.ToString()); 

Nach Kontrolle Vorlage XAML mit sb.ToString() bekommen können Sie es in Ihrem PropertyGrid für die Verwendung und bearbeiten alle Farben, die Sie benötigen, kopieren/einfügen.

0

Die Option "Eine Kopie bearbeiten" in Blend ist nicht immer genau. Sie können die PropertyItems in dem PropertyGrid nicht anzeigen, wenn Sie die kopierte Vorlage verwenden, da eine ItemsSource nicht kopiert wurde.

Werfen Sie einen Blick auf „PART_PropertyItemsControl“ im Stil „Property“ Targeting: Es gibt keine Itemssource. Setzen Sie es auf: ItemsSource = "{Binding-Eigenschaften, RelativeSource = {RelativeSource TemplatedParent}}" und Sie werden die PropertyItems sehen.