WPF 应用程序中自定义控件的异常

Exception from custom control in WPF app

我正在尝试为我的 WPF 应用程序创建自定义控件,但不明白为什么它不起作用。

我有两个项目 - 一个是我的自定义控件库,其中一个自定义控件派生自 Image,只有很少的方法,第二个项目是我想在其中使用我的控件。我不想对样式或绑定做任何事情,所以我使用默认值。

所以,我的自定义控件主题(generic.xaml):

   <ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:RTPlayer">
    <Style 
     TargetType="{x:Type local:RTPlayer}" BasedOn="{StaticResource {x:Type Image}}">
    </Style>

和代码部分:

namespace RTPlayer
{
   public class RTPlayer : Image
   {
    static RTPlayer()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(RTPlayer), new FrameworkPropertyMetadata(typeof(RTPlayer)));
    }

    public void Start()
    {
       // ....
    }
   }
}

在我的主项目中,我添加了对我的库 .dll 文件的引用,我正在尝试将控件用作:

  <Window x:Class="rtspWPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:rtspWPF"
    xmlns:CustomControls="clr-namespace:RTPlayer;assembly=RTPlayer"
    xmlns:CustomControls="clr-namespace:RTPlayer;assembly=RTPlayer"
    Title="MainWindow" Height="auto" Width="auto">
<CustomControls:RTPlayer x:Name="image" Margin="10,10,10,10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  Width="auto" Height="auto"/>

问题是 - 1) xaml CustomControl:RTPlayer 字符串警告我:"cant find resource named "System.Windows.Controls.Image"。资源名称区分大小写"; 2) 如果我尝试启动应用程序,它会抛出一个 Markup.XamlParseException,即 Markup.StaticResourceHolder 抛出异常..

我的代码有什么问题?

感谢 Daniel 在评论中的回答,我找到了让我的应用正常运行的方法。

大牛告诉我图像组件没有基本样式后,我找到了一个有类似问题的人:How to inherit type-based styles in WPF?

我刚刚将 Generic.xaml 文件重写为:

<ResourceDictionary
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:local="clr-namespace:RTPlayer">

   <Style TargetType="Image" x:Key="ImageStyle">

   </Style>

   <Style TargetType="{x:Type local:RTPlayer}" BasedOn="{StaticResource ImageStyle}">
   </Style>
</ResourceDictionary>

一切正常!