WPF:XAML 命名空间中不存在名称 XYZ
WPF: The name XYZ does not exist in XAML namespace
我试图为图像按钮制作可重复使用的模板,发现这个很棒 advice,但我无法让它工作。你能告诉我,我做错了什么吗?我是 WPF 的新手,所以它可能是非常基础的东西,但我看不到它。
我的ImageButton.cs
class:
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
文件中,您将 ControlTemplate
的 TargetType
设置为错误的内容,这会导致编译时错误。而不是:
<ControlTemplate TargetType="{x:Type Button}">
应该是:
<ControlTemplate TargetType="{x:Type my:ImageButton}">
解决这个问题后,项目在我的电脑上编译成功。
我试图为图像按钮制作可重复使用的模板,发现这个很棒 advice,但我无法让它工作。你能告诉我,我做错了什么吗?我是 WPF 的新手,所以它可能是非常基础的东西,但我看不到它。
我的ImageButton.cs
class:
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
文件中,您将 ControlTemplate
的 TargetType
设置为错误的内容,这会导致编译时错误。而不是:
<ControlTemplate TargetType="{x:Type Button}">
应该是:
<ControlTemplate TargetType="{x:Type my:ImageButton}">
解决这个问题后,项目在我的电脑上编译成功。