5

プロジェクトで NuGet のExtended WPF Toolkit Community Edition v2.6を使用していますが、コントロール テンプレートをテーマ化またはカスタマイズできるようにするために他に何かする必要があるかどうかわかりません。

Designer/Blend に PropertyGrid コントロールの既存の既定のテンプレートのコピーを作成するように依頼した後、UI が壊れます。テンプレートは正しいように見えますが、設計時または実行時に機能しなくなります。

ここに画像の説明を入力

デフォルトのテンプレートを新しいスタイルにコピーすることを選択した後:

画像

このコントロールの組み込みスタイルを編集する簡単な方法はありますか? 私は本当に、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>

デフォルトをコピーしてプロパティ コンテナ スタイルを作成しようとすると、「スタイルのコピーに失敗しました」というメッセージが表示されます。VS Designer または Blend 内からのエラー。

ここに画像の説明を入力

結果は次のようになります。

スタイルのコピーからのエラー

Xceed Toolkit アセンブリから generic.xaml を手動でインクルードしようとしましたが、問題は解決しませんでした。

リソースを参照する 2 つの方法を試しました。

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

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

PropertyContainerStyle を設定しようとしたときのデザイナーからのスタック トレースは次のとおりです。

スタックトレース

4

2 に答える 2

1

Blend の「コピーを編集」オプションは常に正確であるとは限りません。ItemsSource がコピーされていないため、コピーしたテンプレートを使用すると、PropertyGrid に PropertyItems が表示されません。

「PropertyGrid」をターゲットとするスタイルの「PART_PropertyItemsControl」を見てください。ItemsSource はありません。次のように設定します: ItemsSource="{Binding Properties, RelativeSource={RelativeSource TemplatedParent}}" すると、PropertyItems が表示されます。

于 2016-09-13T13:41:22.140 に答える
0

完全なPropertyGridのコントロール テンプレートを Xceed.Wpf.Toolkit.dll から直接取得するには、任意の 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());

コントロール テンプレート xaml を取得しsb.ToString()たら、それをコピーして貼り付けて使用し、PropertyGrid必要な色を編集できます。

于 2016-03-28T14:22:36.253 に答える