在WPF中向窗口添加Canvas的派生类时遇到问题
本文关键字:派生 遇到 问题 Canvas WPF 窗口 添加 | 更新日期: 2023-09-27 18:07:01
我是WPF的新手,我正在阅读Pro WPF c# 2010这本书。我想创建一个自定义派生类的画布,然后将其添加到主窗口,但我不能将其添加到主窗口。
我所做的是我已经创建了一个名为DrawingCanvas的新类(添加了DrawingCanvas.c#文件),并像这样声明它:
类定义:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media;
using System.Windows.Controls;
namespace CustomDrawingCanvas
{
public class DrawingCanvas : Canvas
{
private List<Visual> visuals = new List<Visual>();
protected override int VisualChildrenCount
{
get
{
return visuals.Count;
}
}
protected override Visual GetVisualChild(int index)
{
return visuals[index];
}
public void AddVisual(Visual visual)
{
visuals.Add(visual);
base.AddVisualChild(visual);
base.AddLogicalChild(visual);
}
public void DeleteVisual(Visual visual)
{
visuals.Remove(visual);
base.RemoveVisualChild(visual);
base.RemoveLogicalChild(visual);
}
}
}
但是当我尝试添加它时(按照书中给出的XAML,它没有给出关于在主窗口的XAML文件中放置XAML的任何信息)使用这个XAML:
<local:DrawingCanvas x:Name="drawingSurface" Background="White" ClipToBounds="True"
MouseLeftButtonDown="drawingSurface_MouseLeftButtonDown"
MouseLeftButtonUp="drawingSurface_MouseLeftButtonUp"
MouseMove="drawingSurface_MouseMove" />
给出错误"local是一个未声明的前缀"。当我把鼠标悬停在
我已经添加了一个像这样的堆栈面板:
<Window x:Class="CustomDrawingCanvas.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Name="spanel">
<local:DrawingCanvas x:Name="drawingSurface" Background="White" ClipToBounds="True"
MouseLeftButtonDown="drawingSurface_MouseLeftButtonDown"
MouseLeftButtonUp="drawingSurface_MouseLeftButtonUp"
MouseMove="drawingSurface_MouseMove" />
</StackPanel>
</Grid>
</Window>
我做错了什么
,我也试图添加一个实例的DrawingCanvas使用这样的代码:
public void AddDrawingSurface()
{
drawingSurface = new DrawingCanvas();
drawingSurface.Background = new SolidColorBrush(Colors.AliceBlue);
drawingSurface.ClipToBounds = true;
Button button = new Button();
button.Content = "A button";
//spanel.Children.Add(button);
spanel.Children.Add(drawingSurface);
}
在InitializeComponent()之后调用这个函数
按钮被添加,但没有堆栈面板。请解释一下我缺少的东西是什么,我试过谷歌,并找到了许多通过代码添加自定义元素的方法,该方法通常是相同的,适用于其他元素,但不适用于DrawingCanvas: Canvas类。
你需要在你的Windows类头文件中声明你的本地别名,即
<Window x:Class="CustomDrawingCanvas.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="The namespace of your custom control here"
Title="MainWindow" Height="350" Width="525">