4

Я используюот NuGet в моем проекте, но я не знаю, есть ли что-то большее, что я должен сделать, чтобы позволить мне тему или настроить шаблон управления.Как использовать Blend или VS Designer для редактирования шаблона стиля по умолчанию для WPF PropertyGrid

После того, как дизайнер/Blend создаст копию существующего шаблона по умолчанию для элемента управления PropertyGrid, пользовательский интерфейс не работает. Шаблон выглядит корректно, но больше не работает во время разработки или времени выполнения.

enter image description here

После выбора для копирования шаблона по умолчанию в новый стиль:

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

Есть простой способ изменить встроенные стили для этого контроля? Я просто пытаюсь переопределить цвета переднего плана/фона редакторов/ярлыков PropertyGrid.

Я пробовал некоторые ручной тыкать в XAML с ограниченным успехом:

<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> 

При попытке создать стиль Property Container, путем копирования по умолчанию, я получаю «Копировать стиль не удалось.» ошибка из VS Designer или Blend.

enter image description here

Результаты в этом:

Error from Copy Style

Я попытался вручную, включая Generic.xaml из сборки Xceed Toolkit, но это не устранило проблему.

Я попробовал два способа ссылки на ресурс:

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

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

Вот трассировки стека из конструктора, когда я пытаюсь установить PropertyContainerStyle:

stack trace

+0

Что было не так со стилями, которые вы пробовали («Я пробовал какую-то ручную игру в XAML с ограниченным успехом»). Разве это не сработало? Переписал ли он другие вещи? – FriendlyGuy

+0

Снимок экрана выше показывает, что произошло после того, как я попытался создать стиль. Весь элемент управления рухнул до бара, как будто коллекция Items была пуста. С тех пор я обнаружил, что должен вручную включать generic.xaml, но это не помогло моей ситуации. Я все еще не могу создать этот PropertyGrid. –

+0

Какую версию VS вы используете? В * VS Professional 2015 с обновлением 1 * создание копии шаблона по умолчанию работало для обоих описанных вами способов (либо с помощью «Редактировать шаблон» и «Редактировать дополнительные шаблоны»), не нарушая пользовательский интерфейс. Я использую тот же toolkit v2.6, но без nuget (только что загруженные и ссылающиеся библиотеки). Но обратите внимание - для этих тестов я просто создал пустой 'PropertyGrid'. Я могу поделиться сгенерированными шаблонами, если вам нужно. – Sam

ответ

0

Чтобы получить полный PropertyGrid 's contol template непосредственно из Xceed.Wpf.Toolkit.dll, вы можете попробовать использовать этот код в любом приложении WPF (note, что вам нужно иметь <Grid x:Name="RootGrid" /> в любом месте XAML для этого примера работать):

 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()); 

После получения шаблона управления XAML с sb.ToString() вы можете копировать/вставить его для использования в вашей PropertyGrid и редактировать любые цвета, которые вам необходимы.

0

Параметр «Редактировать копию» в Blend не всегда точным. Вы не можете увидеть PropertyItems в PropertyGrid при использовании скопированного шаблона, потому что ItemsSource не был скопирован.

Посмотрите на «PART_PropertyItemsControl» в таргетинге на стиль «PropertyGrid»: нет ItemsSource. Установите его на: ItemsSource = "{Свойства привязки, RelativeSource = {RelativeSource TemplatedParent}}" , и вы увидите PropertyItems.