我在我的项目中使用NuGet中的Extended WPF Toolkit Community Edition v2.6,但我不知道是否还有其他事情可以让我主题或自定义控件模板。
在要求Designer / Blend为PropertyGrid控件创建现有默认模板的副本后,UI将被破坏。模板看起来正确但不再在设计时或运行时运行。
选择将默认模板复制到新的样式:
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>
尝试创建属性容器样式时,通过复制默认值,我得到&#34;复制样式失败。&#34; VS Designer或Blend中的错误。
结果如下:
我尝试手动包含Xceed Toolkit程序集中的generic.xaml,但它还没有解决问题。
我尝试了两种引用资源的方法:
<ResourceDictionary Source="/Xceed.Wpf.Toolkit;component/themes/generic.xaml" />
<ResourceDictionary Source="pack://application:,,,/Xceed.Wpf.Toolkit;component/Themes/generic.xaml">
当我尝试设置PropertyContainerStyle时,以下是Designer中的堆栈跟踪:
答案 0 :(得分:0)
要直接从Xceed.Wpf.Toolkit.dll获取完整的PropertyGrid
控制台模板,您可以尝试在任何WPF应用程序中使用此代码(注意您需要在xaml中的任何位置<Grid x:Name="RootGrid" />
才能使此示例正常工作):
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());
使用sb.ToString()
获取控件模板xaml后,您可以复制/粘贴它以便在PropertyGrid
中使用,并编辑您需要的任何颜色。
答案 1 :(得分:0)
&#34;编辑副本&#34; Blend中的选项并不总是准确的。使用复制的模板时,您无法在PropertyGrid中看到PropertyItem,因为未复制ItemsSource。
看看&#34; PART_PropertyItemsControl&#34;在风格定位&#34; PropertyGrid&#34; :没有ItemsSource。将其设置为: ItemsSource =&#34; {Binding Properties,RelativeSource = {RelativeSource TemplatedParent}}&#34; 你会看到PropertyItems。