WPF:XAML 命名空间中不存在名称 XYZ

WPF: The name XYZ does not exist in XAML namespace

我试图为图像按钮制作可重复使用的模板,发现这个很棒 advice,但我无法让它工作。你能告诉我,我做错了什么吗?我是 WPF 的新手,所以它可能是非常基础的东西,但我看不到它。

我的ImageButton.csclass:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace ImageBut
{
    public class ImageButton : Button
    {
        static ImageButton()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(ImageButton),
                new FrameworkPropertyMetadata(typeof(ImageButton)));
        }


        public ImageSource Image
        {
            get { return (ImageSource)GetValue(ImageProperty); }
            set { SetValue(ImageProperty, value); }
        }

        public static readonly DependencyProperty ImageProperty =
            DependencyProperty.Register("Image", typeof(ImageSource), typeof(ImageButton), new PropertyMetadata(default(ImageSource)));

    }
}

我的 generic.xaml 在 Themes 子文件夹中。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:my="clr-namespace:ImageBut;assembly=ImageBut"
                    >

    <Style x:Key="{x:Type my:ImageButton}" TargetType="{x:Type my:ImageButton}">
        <Setter Property="Width" Value="32"></Setter>
        <Setter Property="Height" Value="32"></Setter>
        <Setter Property="BorderThickness" Value="0"></Setter>
        <Setter Property="Margin" Value="4,0,0,0"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Image Source="{TemplateBinding Image}" Stretch="Fill"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <!--  Some triggers ( IsFocused, IsMouseOver, etc.) -->
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>    
</ResourceDictionary>

我的MainWindow.xaml

<Window x:Class="ImageBut.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:ImageBut;assembly=ImageBut"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <my:ImageButton Image="C:\Users\Martin\Source\Workspaces\Digiterm\ImageBut\ImageBut_1.bmp"></my:ImageButton>

    </Grid>

</Window>

这是我的Project properties and here is snapchat of Solution Explorer

我得到异常:

1>C:\Users\Martin\Source\Workspaces\Digiterm\ImageBut\ImageBut\MainWindow.xaml(7,10): error MC3074: The tag 'ImageButton' does not exist in XML namespace 'clr-namespace:ImageBut;assembly=ImageBut'. 

谢谢!

命名空间声明中不需要程序集名称。

而不是这个:

xmlns:my="clr-namespace:ImageBut;assembly=ImageBut"

试试这个:

xmlns:my="clr-namespace:ImageBut"

顺便说一句,标准 WPF Button 控件支持任何类型的内容,包括图像。所以你可以在 Button 中有一个 Image 控件,像这样:

<Button>
    <Image Source="C:\Users\Martin\Source\Workspaces\Digiterm\ImageBut\ImageBut_1.bmp" />
</Button>

编辑

在您的 generic.xaml 文件中,您将 ControlTemplateTargetType 设置为错误的内容,这会导致编译时错误。而不是:

<ControlTemplate TargetType="{x:Type Button}">

应该是:

<ControlTemplate TargetType="{x:Type my:ImageButton}">

解决这个问题后,项目在我的电脑上编译成功。