【问题标题】:XAML designer doesn't show Custom WindowXAML 设计器不显示自定义窗口
【发布时间】:2016-03-05 22:25:25
【问题描述】:

我有一个从自定义窗口继承的 WPF 窗口。它运行正常,但 VS 设计器将其显示为默认的空窗口。

自定义窗口代码:

using System.Windows;
using System.Windows.Media;

namespace WpfApplication2
{
    public class CustomWindow : Window
    {
        public CustomWindow()
        {
            Background = new SolidColorBrush(Colors.Red);
        }
    }
}

MainWindow.xaml:

<local:CustomWindow x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication2"
        Title="MainWindow" Height="350" Width="525">

</local:CustomWindow>

设计师:

预期结果:

【问题讨论】:

  • 你不见了InitializeComponent()
  • 没有这样的功能,因为CustomWindow 类不包含 XAML。而且无论如何也不可能从包含 XAML 标记的 Windows 继承类。
  • VS 的版本/构建是什么?什么版本的 Windows?
  • VS 2015(标签中提到),Windows 10(应该没关系)
  • 我确信这是 XAML 设计器的错误/限制。我尝试了所有我知道的方法来设置子类背景(C#、XAML、Themes\Generic.xaml)。所有在运行时工作。在设计时没有。 MahApps.Metro 是一个主题库。他们继承了Window,他们遇到了这个问题(我和作者聊天)。

标签: c# wpf xaml visual-studio-2015


【解决方案1】:

Visual Studio 和 Blend 中的 XAML 设计器不一定尊重直接在代码中设置的任何依赖项属性(尤其是在构造函数中),而是希望仅在 XAML 中设置这些依赖项属性,这是规范的方式在设计时使用依赖系统。当然,如果您愿意,可以在代码中设置所有内容,但是在使用 XAML 设计器时,您无法保证与在运行的应用程序中看到的行为相同。 此外,如果您在代码中设置依赖属性,那么您需要非常小心设置它们的方式,因为您可能会破坏最终可能在这些属性上设置的任何绑定。

无论如何,获得所需结果的更好方法是像这样在 XAML 中设置颜色

<local:CustomWindow x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication2"
        Title="MainWindow" Height="350" Width="525" Background="Red">

</local:CustomWindow>

【讨论】:

  • 你可能没有注意到MainWindowCustomWindow 是两个不同的类。如果 CustomWindow 类为空,则没有任何意义。我想要一些基础窗口类并从中继承所有其他窗口。无法从已有 XAML 代码的窗口继承,因此它必须仅是 C#。
  • 是的,我确实注意到了 - 当然,但是您想要 XAML 设计器的解决方法 - 就是这里
  • 顺便说一下,你可以有一个自定义的 Window 类,它有自己的样式和模板,所以如果你对简单的解决方法不感兴趣,那么试着付出一些努力来创建你的自己的完整实施
  • 将代码从基类移动到每个子类违背了继承的全部目的。我也尝试将此代码移动到单独的样式,但它也不起作用,因为没有代码就无法应用此样式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多