c# - Changing a Polygon's Points -


solution dynamic margin on window drag

so i'm trying polygon move window moved. have;

    private void resetpolygon(point point1, point point2, point point3)     {         speechpoly.points.clear();         observablecollection<point> mypointcollection = new observablecollection<point>();         mypointcollection.add(point3);         mypointcollection.add(point2);         mypointcollection.add(point1);         foreach (point p in mypointcollection)         {             speechpoly.points.add(p);         }     }      private void window_locationchanged(object sender, eventargs e)     {         if (this.isloaded)         {             point point1 = new point(newpoint3);             point point2 = new point(newpoint2);             point point3 = new point(newpoint1);             resetpolygon(newpoint1, newpoint2, newpoint3);  //write out values of both list , polygon screen!             txtblock.text = newpoint1.x.tostring("n2") + ", " + newpoint1.y.tostring("n2") +  "\n" + newpoint2.x.tostring("n2") + ", " + newpoint2.y.tostring("n2") + "\n" +  newpoint3.x.tostring("n2") + ", " + newpoint3.y.tostring("n2");              txtblock.text += "\n" + speechpoly.points[0].x.tostring("n2") + ", " +  speechpoly.points[0].y.tostring("n2") + "\n" + speechpoly.points[1].x.tostring("n2") + ", " +         speechpoly.points[1].y.tostring("n2") + "\n" + speechpoly.points[2].x.tostring("n2") + ", "+  speechpoly.points[2].y.tostring("n2");                         }                     } 

but polygon remains same shape no matter what, though textblock shows values of points in list , polygon's points changing.

i've tried bind points property of polygon code.

<polygon     name="speechpoly"     points="{binding mypointcollection, relativesource={relativesource findancestor, ancestortype=window}}"     stroke="black"      strokethickness="2"     </polygon> 

i've tried using pointscollection opposed list<points> same result. seems polygon not refreshing.

i not being satisfied previous answer gave after workaround..

i found better solution problem not require reset databinds.

so binding xaml being directed property incc data converted points polygon use when drawing.

<window x:class="wpfapplication9.mainwindow"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns:local="clr-namespace:wpfapplication9"     title="mainwindow" height="350" width="525" locationchanged="window_locationchanged" > <window.resources>     <local:mypointcollectionconverter x:key="mcolconv" /> </window.resources> <canvas>     <polygon name="speechpoly" stroke="black" strokethickness="2"               points="{binding path=mypointcollection, converter={staticresource mcolconv}}" /> </canvas> 

using system; using system.collections.objectmodel; using system.componentmodel; using system.windows; using system.windows.data; using system.windows.media;  namespace wpfapplication9 { /// <summary> /// interaction logic mainwindow.xaml /// </summary> public partial class mainwindow : window, inotifypropertychanged {     public event propertychangedeventhandler propertychanged;      private observablecollection<point> _mypointcollection = new observablecollection<point>();     public observablecollection<point> mypointcollection { { return _mypointcollection; } }      public mainwindow()     {         mypointcollection.add(new point(100, 50));         mypointcollection.add(new point(150, 100));         mypointcollection.add(new point(50, 100));         initializecomponent();         datacontext = this;     }      private void resetpolygon(point point1, point point2, point point3)     {         mypointcollection.clear();         mypointcollection.add(point1);         mypointcollection.add(point2);         mypointcollection.add(point3);         if (propertychanged != null)             propertychanged(this, new propertychangedeventargs("mypointcollection"));     }      private void window_locationchanged(object sender, eventargs e)     {         if (this.isloaded)         {             random rnd = new random();             point point1 = new point(rnd.next(50, 200), rnd.next(50, 200));             point point2 = new point(rnd.next(50, 200), rnd.next(50, 200));             point point3 = new point(rnd.next(50, 200), rnd.next(50, 200));             resetpolygon(point1, point2, point3);         }      } }  public class mypointcollectionconverter : ivalueconverter {     #region ivalueconverter members      public object convert(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         var regptscoll = new pointcollection(); //regular points collection.         var obsptscoll = (observablecollection<point>)value; //observable used raise incc event.         foreach (var point in obsptscoll)             regptscoll.add(point);         return regptscoll;     }      public object convertback(object value, type targettype, object parameter, system.globalization.cultureinfo culture)     {         return null;     }      #endregion } } 

Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c++ - Using OpenSSL in a multi-threaded application -

All overlapping substrings matching a java regex -