I have a problem. I using property grid to set Collection of points, but program give me InvalidOperationException: collection has been changed…
I try use Custom converter but no result :(
What am I doing wrong?
Could someone write the correct procedure to solve this?
Thanks very much for answer.
I wrote simple program, this is not from my project(my project is top secret :)), but it works on a similar logic.
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="600">
<Grid>
<xctk:PropertyGrid x:Name="workplace_property" ShowSearchBox="False" Background="WhiteSmoke" UpdateTextBoxSourceOnEnterKey="True" ShowAdvancedOptions="True" SnapsToDevicePixels="True" IsMiscCategoryLabelHidden="True" SelectedObject="{Binding}" HorizontalAlignment="Right" Width="251"/>
<Canvas Name="myCanvas" Margin="0">
</Canvas>
</Grid>
</Window>
CS:
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;
using Xceed.Wpf.Toolkit.PropertyGrid.Attributes;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public Polyline drawobj;
public MainWindow()
{
InitializeComponent();
drawobj = new Polyline();
drawobj.Points = new PointCollection() { new Point(10, 20), new Point(40, 20), new Point(150, 150) };
drawobj.StrokeThickness = 2;
drawobj.Stroke = new SolidColorBrush(Colors.Black);
myCanvas.Children.Add(drawobj);
workplace_property.SelectedObject = new polyline_property(drawobj);
}
}
public class polyline_property
{
private Polyline drawobj;
public polyline_property(Polyline obj)
{
drawobj = obj;
}
public PointCollection Points
{
get
{
return drawobj.Points;
}
set
{
drawobj.Points = value;
}
}
public Color Color
{
get
{
return ((SolidColorBrush)drawobj.Stroke).Color;
}
set
{
((SolidColorBrush)drawobj.Stroke).Color = value;
}
}
public Double StrokeThickness
{
get
{
return drawobj.StrokeThickness;
}
set
{
drawobj.StrokeThickness = value;
}
}
public DoubleCollection StrokeDashArray
{
get
{
return drawobj.StrokeDashArray;
}
set
{
drawobj.StrokeDashArray = value;
}
}
public PenLineCap StrokeDashCap
{
get
{
return drawobj.StrokeDashCap;
}
set
{
drawobj.StrokeDashCap = value;
}
}
public Double StrokeDashOffset
{
get
{
return drawobj.StrokeDashOffset;
}
set
{
drawobj.StrokeDashOffset = value;
}
}
}
}