Я новичок в WPF и слежу за книгой Pro WPF C # 2010. Я хочу создать собственный производный класс canvas, а затем добавить его в главное окно, но не могу добавить его вГлавное окно.
Я создал новый класс 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 is notclared prefix».И когда я наведите курсор мыши на
, я добавил в панель стека вот так:
<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 ().
Кнопка добавляется, но не панель стека.Пожалуйста, объясните, что мне не хватает, я попытался найти в Google и нашел множество способов добавления пользовательских элементов с помощью кода, и этот метод, как правило, тот же, который работает для других элементов, но не для класса DrawingCanvas: Canvas.