Visual Studio 2019 WPF 设计器将不会显示自定义控件
Visual Studio 2019 WPF designer won't display custom controls
在 WPF (.NET Core) 应用程序项目中,我定义了一个文件夹来包含所有自定义控件(class 定义和 UI 样式 .xaml 文件,每个自定义控制有一对这样的文件)。在同一程序集中使用这些自定义控件时,我通过合并所有 /Themes/Generic 中的所有 UI 样式将默认样式关联到自定义控件 /Themes/Generic.xaml
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/CustomControl/SomeCustomControlStyle.xaml" />
<!-- Similarly list all other custom control xaml files -->
</ResourceDictionary.MergedDictionaries>
对于每个自定义控件,相应的 xaml 定义其样式而不 x:Key
如下
<Style TargetType="{x:Type SomeCustomControl}" >
<Setter Parameter="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type SomeCustomControl}">
<!-- UI Definitions -->
</<ControlTemplate>
</Setter.Value>
</Setter>
</Style>
所有自定义控件都派生自 Control
并包含一个带有
的静态构造函数
DefaultStyleKeyProperty.OverrideMetadata(typeof(SomeCustomControl),
new FrameworkPropertyMetadata(typeof(SomeCustomControl)));
项目构建成功,自定义控件在应用程序 运行 时显示。但是 Visual Studio 设计器无法显示任何自定义控件并报告错误
XDG0062 Cannot locate resource 'customcontrols/somecustomcontrol.xaml'.
我尝试将默认样式从单个 .xaml 文件移动到 Generic.xaml,问题可以解决。但是我有很多自定义控件并且使用单个 Generic.xaml 来定义所有 UI 并不是很理想。但是在设计器中看不到UI元素也很不方便。
我错过了什么吗?是 Visual Studio 错误吗?有任何解决方法吗?
谢谢!
问题已解决!
无论出于何种原因,我都需要参考个人风格。 XAML 个使用包 URI 的文件,它必须包含程序集名称。
以下将不起作用:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source=
"pack://application:,,,/CustomControls/SomeCustomControlStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
但以下有效:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source=
"pack://application:,,,/AppAssemblyName;component/CustomControls/SomeCustomControlStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
无论是在 WPF 应用程序程序集中还是在单独的自定义控件库中创建自定义控件,此行为都是相同的。
在 WPF (.NET Core) 应用程序项目中,我定义了一个文件夹来包含所有自定义控件(class 定义和 UI 样式 .xaml 文件,每个自定义控制有一对这样的文件)。在同一程序集中使用这些自定义控件时,我通过合并所有 /Themes/Generic 中的所有 UI 样式将默认样式关联到自定义控件 /Themes/Generic.xaml
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/CustomControl/SomeCustomControlStyle.xaml" />
<!-- Similarly list all other custom control xaml files -->
</ResourceDictionary.MergedDictionaries>
对于每个自定义控件,相应的 xaml 定义其样式而不 x:Key
如下
<Style TargetType="{x:Type SomeCustomControl}" >
<Setter Parameter="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type SomeCustomControl}">
<!-- UI Definitions -->
</<ControlTemplate>
</Setter.Value>
</Setter>
</Style>
所有自定义控件都派生自 Control
并包含一个带有
DefaultStyleKeyProperty.OverrideMetadata(typeof(SomeCustomControl),
new FrameworkPropertyMetadata(typeof(SomeCustomControl)));
项目构建成功,自定义控件在应用程序 运行 时显示。但是 Visual Studio 设计器无法显示任何自定义控件并报告错误
XDG0062 Cannot locate resource 'customcontrols/somecustomcontrol.xaml'.
我尝试将默认样式从单个 .xaml 文件移动到 Generic.xaml,问题可以解决。但是我有很多自定义控件并且使用单个 Generic.xaml 来定义所有 UI 并不是很理想。但是在设计器中看不到UI元素也很不方便。 我错过了什么吗?是 Visual Studio 错误吗?有任何解决方法吗?
谢谢!
问题已解决!
无论出于何种原因,我都需要参考个人风格。 XAML 个使用包 URI 的文件,它必须包含程序集名称。
以下将不起作用:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source=
"pack://application:,,,/CustomControls/SomeCustomControlStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
但以下有效:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source=
"pack://application:,,,/AppAssemblyName;component/CustomControls/SomeCustomControlStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
无论是在 WPF 应用程序程序集中还是在单独的自定义控件库中创建自定义控件,此行为都是相同的。