c# – 创建可重用的WINDOW控件

好吧,这似乎很难,或者我错过了一些明显的东西.

我想创建可重复使用的WINDOW,它将在所有产品中使用.这意味着该控件位于
WPF.Controls程序集中.主题/ 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>

我所看到的:大黑屏,没有别的,没什么(大黑矩形 – 没有标题栏).任何人都可以对此有所了解吗?通过一些谷歌搜索,我发现其他人有同样的问题,所以我想这不是我特定的.

禁用硬件渲染没有帮助.

最佳答案 您需要从CustomWindow-class中删除静态构造函数.设置DefaultStyleKey的目的是帮助WPF找到应在Themes / Generic.xaml中定义的defaulttemplate.但既然你不想这样做,那么你需要删除它.

我通过将CustomWindow类添加到类库项目(必须导入相当多的依赖项)来测试您的代码,然后在WPF项目中使用它.随着你的构造函数到位,窗口的所有内容都是黑色的,一旦我删除它,一切都很完美.

This是制作自己的控件的好资源

// Chris Eelmaa: This is correct, also, I’d like to add that it’s also
possible to add Themes/Generic.xaml to your dll, and then you need to
add the assembly ThemeInfo attribute to your DLL (AssemblyInfo.cs),
in order for it to work:

// 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 
)]
点赞