У меня есть пользовательский элемент управления, который вызывает исключение при попытке добавить его в представление конструктора. ( Больше информации об этой ошибке здесь )
Мне сказали, что я должен сказать конструктору не признавать этот элемент управления, чтобы он не сериализовал его. Я нашел эту статью MSDN , которая, кажется, делает то, что я хочу. Надеюсь, это исправит мою ошибку! :) (Если у вас есть лучшие идеи, пожалуйста, дайте мне знать, как исправить эту ошибку.)
Как я могу добавить эти метаданные в мой класс в Hidden или Content? Спасибо!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using System.ComponentModel.Design.Serialization;
namespace WinformsPlayground
{
[DesignerSerializerAttribute()] //THE QUESTION IS HERE!
public partial class HorizontalPictureScroller : UserControl
{
public HorizontalPictureScroller()
{
InitializeComponent();
Pictures = new ObservableCollection<SelectablePicture>();
Pictures.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Pictures_CollectionChanged);
}
#region "Properties"
public ObservableCollection<SelectablePicture> Pictures { get; set; }
private int PositionControlX = 0;
#endregion
#region "Methods"
private void RedrawPictures()
{
PositionControlX = 0;
foreach (var picture in Pictures)
{
picture.Location = new Point(PositionControlX + panelPicturesWrapper.AutoScrollPosition.X, 0);
PositionControlX += 130;
panelPicturesWrapper.Controls.Add(picture);
}
}
public void AddPicture(SelectablePicture picture)
{
Pictures.Add(picture);
}
public void RemovePicture(SelectablePicture picture)
{
Pictures.Remove(picture);
}
public void MovePictureLeft(int index)
{
SelectablePicture tmpPicture = Pictures[index];
Pictures[index] = Pictures[index - 1];
Pictures[index - 1] = tmpPicture;
}
public void MovePictureRight(int index)
{
SelectablePicture tmpPicture = Pictures[index];
Pictures[index] = Pictures[index + 1];
Pictures[index + 1] = tmpPicture;
}
#endregion
#region "Events"
void Pictures_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
RedrawPictures();
}
#endregion
}
}
РЕДАКТИРОВАТЬ: Следуя совету здесь, я добавил это в начало класса, но я получаю ошибку при компиляции.
namespace WinformsPlayground
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public partial class HorizontalPictureScroller : UserControl
{
public HorizontalPictureScroller()
{
InitializeComponent();
Pictures = new ObservableCollection<SelectablePicture>();
Pictures.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Pictures_CollectionChanged);
}
Ошибка:
Атрибут ошибки 1
«DesignerSerializationVisibility» является
недопустимо в этом типе объявления. Это
действительно только для метода, свойства,
индексатор, поле, событие
деклараций. C: \ Users \ Sergio.Tapia \ документы \ визуальный
студия
2010 \ Projects \ WinformsPlayground \ WinformsPlayground \ HorizontalPictureScroller.cs 15 6 WinformsPlayground