4

わかりました、これは非常に難しいようです。または、明らかな何かが欠けています。製品全体で使用される再利用可能な WINDOW を作成したいと考えています。これは、コントロールが WPF.Controls アセンブリ内にあることを意味します。Themes/Generic.xaml は解決策ではありません。カスタム メッセージ フックなど、ウィンドウに独自のコードを提供する必要があります。

WPF.Controls.dll の私のコードは次のとおりです。

public class CustomWindow : Window
{
    static CustomWindow()
    {
        DefaultStyleKeyProperty.OverrideMetadata(
 typeof(CustomWindow),
 new FrameworkPropertyMetadata(typeof(CustomWindow)));
    }

ここで、別のアセンブリで XAML ファイルを作成し、これを使用しようとします。

<controls:CustomWindow x:Class="Views.MainWindow"
                               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                               xmlns:controls="clr-namespace:WPF.Controls;assembly=WPF.Controls"
                               WindowStartupLocation="CenterScreen">
<TextBlock Text="TESTING" />
</controls:CustomWindow>

私が見たもの:大きな黒い画面、他には何もありません(大きな黒い四角形 - キャプションバーなし)。誰かがこれに光を当てることができますか? 少しグーグルで調べたところ、他の誰かが同じ問題を抱えていることがわかったので、それは私に固有のものではないと思います.

ハードウェア レンダリングを無効にしても役に立ちません。

4

1 に答える 1

2

CustomWindow クラスから静的コンストラクターを削除する必要があります。DefaultStyleKey を設定する目的は、WPF が Themes/Generic.xaml で定義する必要がある defaulttemplate を見つけられるようにすることです。しかし、それをしたくないので、それを削除する必要があります。

CustomWindow クラスをクラス ライブラリ プロジェクトに追加してコードをテストし (かなりの数の依存関係をインポートする必要がありました)、それを WPF プロジェクトで使用しました。コンストラクターを配置すると、ウィンドウのすべてのコンテンツが黒くなり、削除するとすべてが完全に機能しました。

これは、独自のコントロールを作成するための優れたリソースです

// Chris Eelmaa: これは正しいです。また、Themes/Generic.xaml を dll に追加することも可能であることを付け加えたいと思います。次に、アセンブリThemeInfo属性を DLL (AssemblyInfo.cs) に追加する必要があります。それが機能するために:

// http://blogs.magnatis.com/tim/dude-wheres-my-default-style
[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific 
    // resource dictionaries are located 
    ResourceDictionaryLocation.SourceAssembly //where the
    // generic resource dictionary is located 
)]
于 2013-11-19T11:49:50.760 に答える