ÄúÏÖÔÚµÄλÖ㺠ÆôÌìÍø >> ¼¼ÊõÖÐÐÄ >> .net >> ÕýÎÄ
½ñÌìÊÇ£º
WPF/SilverlightΪʲôҪʹÓÃCanvas.SetLeft()ÕâÑùµÄ·½·¨?            ¡¾×ÖÌ壺С ´ó¡¿
WPF/SilverlightΪʲôҪʹÓÃCanvas.SetLeft()ÕâÑùµÄ·½·¨?
×÷ÕߣºÎ´Öª    ÎÄÕÂÀ´Ô´£º×ªÔØ    µã»÷Êý£º    ¸üÐÂʱ¼ä£º2008-5-3
    
  ¿´¼ûÔ°×ÓÀïÓÐÐÖµÜÔÚÌÖÂÛµ½¹ØÓÚWPF/SLÖеÄÊôÐÔµÄÎÊÌ⣬±ÈÈç:
  
  ¡°ÎªÉ¶flex¿ÉÒÔÖ±½Ó¶Ô¿Ø¼þµÄleft,topÕâЩÊôÐÔÖ±½Ó²Ù×÷£¬sl»¹Òª×ªÒ»Ï¡£Õâ¸öºÜÄÑÀí½â£¬ÄѵÀÊÇÒòΪdpµÄºÃÓã¿Ïà¶ÔdpµÄʹÓÃflexµÄʵÏÖ¼òµ¥Ã÷Á˵ĶàÁË¡±
  
  ÕýºÃÎÒ×î½üÔÚÑо¿WPF£¬ÔÚÕâ¶ù˵˵ÎҵĿ´·¨¡£¿ÉÄÜ´ó¼Ò´ó¶à¾ÍÊÇÔÚÓÃWPF»òÕßSL¾ÍÊÇ×ö½çÃæ£¬Òò´ËÊ×ÏȱȽϹØÐĽçÃæ²¼¾ÖµÄÎÊÌ⣬ÎÒ¾ÍÏÈÒÔWPFµÄlayoutΪÀý½âÊÍһЩÓ÷¨¡£
  
  WPFÖеIJ¼¾Ö¶ÔÏóWPFÖв»¿ÉÒÔ¸øÃ¿¸ö½çÃæÔªËØ¿Ø¼þ¶¼¼ÓÉÏ"Left"»òÕß"Top"ÕâÑùµÄÊôÐÔÂð£¿Æäʵ²»ÊÇ£¬ÔÚÒ»°ãµÄ²¼¾Öʱ£¬WPFΪÿ¸ö¼Ì³Ð×ÔFrameworkElementµÄ×é¼þÌṩÁËMarginÕâ¸öÊôÐÔ£¬Í¨¹ýÕâ¸öÊôÐÔ£¬ÎÒÃÇ¿ÉÒÔÇáËɵÄÉèÖÃËÄÖܵı߾ࡣÔÙ¼ÓÉÏHorizontalAlignmentºÍVerticalAlignmentÊôÐÔ£¬ÎÒÃÇ×ãÒÔÍê³ÉÒ»°ãµÄÔªËØ¶¨Î»¡£×î³£Óõģ¬ÎÒÃÇÔÚWindowsÖÐËæ±ãÍÏÒ»¸öButton£¬¾Í»á¿´µ½Éú³ÉÀàËÆÕâÑùµÄXAML´úÂë:
  
  <Button Name="button1" Margin="0,0,28,7" HorizontalAlignment="Right" Width="53">button</Button>
  Ê¹ÓÃMarginÊôÐÔ£¬äÖȾʱµÄ¿Ø¼þ¾ßÌåλÖÃÊÇÈçºÎ¾ö¶¨µÄ£¿ÎÒÃÇ¿ÉÒÔ˵ÊÇ¡°¿Ø¼þ×Ô¼º¾ö¶¨µÄ¡±£¬»òÕß˵ÊÇ¡°WPFͳһ¾ö¶¨µÄ¡±¡£
  
  ³ý´ËÖ®Í⣬WPF»¹ÌṩÁËÁíÒ»ÖÖ²¼¾Ö·½Ê½£¬Ò²¾ÍÊÇÀûÓò¼¾Ö¶ÔÏó½øÐв¼¾Ö£¬ÕâÖÖ²¼¾Ö·½Ê½×î´óµÄÌØµãÊÇ£¬Óɸ¸¿Ø¼þͳһ¶Ô×Ó¶ÔÏóµÄ²¼¾Ö½øÐйÜÀí¡£ÕâÑùµÄ¿Ø¼þÓÐ"Border"(µ¥¸ö×ӿؼþ)£¬"StackPanel"(Á÷²¼¾Ö),"DockPanel"(Í£¿¿²¼¾ÖµÈ)£¬»¹ÓÐ×î³£ÓõÄ"Gird"¡£ÏàÐÅ´ó¼ÒÓÃÕâЩ²¼¾Ö¿Ø¼þÒѾ­ºÜÊìϤÁË¡£ÎÒÃÇÀ´¿´Ò»Ð©Ê¾Àý´úÂ룬¿´¿´WPFÊÇÔõÑùʵÏÖ"Óɸ¸¿Ø¼þͳһ¶Ô×Ó¶ÔÏóµÄ²¼¾Ö½øÐйÜÀí"µÄ¡£ÒÔCanvas×÷ΪÀý×Ó
  
  class Canvas:Panel
  {
   //¶¨ÒåDependencyProperty
   //public static readonly DependencyProperty LeftProperty =
   //public static readonly DependencyProperty TopProperty =
  
   protected override Size MeasureOverride(Size availableSize)
   {
   //ÕâÀï¼ÆËãËùÓÐ×ӿؼþ×ÔÉíµÄÆÚÍû³ß´ç´óС
   foreach (UIElement ele in InternalChildren)
   {
   ele.Measure(availableSize);
   }
   //ÕâÀï·µ»Ø×Ô¼º£¨¸¸¿Ø¼þ£©µÄ²âÁ¿´óС£¬¿ÉÓöà´ó¾Í¶à·µ»Ø¶à´ó£¬²¢Ã»Óиù¾Ý×ӿؼþ±ä»¯
   return availableSize;
   }
   protected override Size ArrangeOverride(Size finalSize)
   {
   //ÕâÀï¼ÆËãÿ¸ö×ӿؼþµÄλÖã¬Ò²¾ÍÊǶÔ×ӿؼþ½øÐв¼¾Ö
   foreach (UIElement ele in InternalChildren)
   {
   //Õâ¸öRectÓÃÀ´Ö¸¶¨×ӿؼþÏà¶Ô×Ô¼ºµÄλÖÃ
   Rect itsRect = new Rect(
   new Point((double)ele.GetValue(LeftProperty), (double)ele.GetValue(TopProperty)), //*Õâ¾äÊǹؼü
   ele.DesiredSize,
   ele.DesiredSize
   );
   ele.Arrange(itsRect);
   }
   return finalSize
   }
  }
  
  
  ÏêϸµÄ²¼¾Ö¹ý³Ì¿ÉÒԲο¼Ò»Ð©Êé¼®£¨Ç¿ÁÒÍÆ¼öºÜ¾­µäµÄ¡¶Application = Code + Markup£ºWPF³ÌÐòÉè¼ÆÖ¸ÄÏ¡·£©£¬ÕâÀï²»¶à˵£¬×¢ÒâArrangeOverride·½·¨ÖеÄnew Point((double)ele.GetValue(LeftProperty), (double)ele.GetValue(TopProperty))£¬ÕâÒ»¾äʹÓÃGetValue·½·¨»ñµÃÁËÿ¸ö×ӿؼþµÄLeftºÍTopÊôÐÔ£¬È»ºó¾Ý´Ë¶Ô×ӿؼþ½øÐж¨Î»¡£
  
  ÎÒ²»ÊìϤFlex£¬¾ÍºÍÒÔǰÆäËû²¼¾Ö·½Ê½¶Ô±Èһϣ¬±ÈÈçWinform£¬Winformʱ´úÓиöÀÏ´ó°ïÎÒÃDz¼¾Ö¡£ÀÏ´ó˵ÁË£¬ÎÒÃÇÿ¸öÄܲÎÓë²¼¾ÖµÄ¶ÔÏó¶¼ÓÐLeft, Top,»òÕß»¹ÓÐPositionÀ´Ö¸¶¨Relative»¹ÊÇAbsoluteÕâÑù£¨ÎÒȷʵÏëµ½cssÈ¥ÁË£©£¬ÏÖÔÚ²»Ò»ÑùÁË£¬ÒòΪ¡°È¨Á¦Ï·š±£¬WPF°Ñ²¼¾ÖµÄȨÀûÖ±½ÓÏ·ŸøÁ˲¼¾Ö¿Ø¼þ£¬Õâ¾ÍÂé·³ÁË£¬CanvasÐèÒªµÄÊÇLeftÊôÐÔ,TopÊôÐÔ£¬Grid¿ÉÄÜÐèÒªRowÊôÐÔ,ColumnÊôÐÔ£¬DockPanel¿ÉÄÜÐèÒªDockÊôÐÔ£¬ÄÇÔõô°ìÄØ£¿ÓÚÊÇÎÒÃǾÍʹÓÃAttached Property£¬°ÑÊôÐÔ¶¨ÒåÔÚ¸÷¸ö¡°Ð¡ÀÏ´ó¡±ÏÂÃæ£¬ÏÂÃæ²ÎÓë²¼¾ÖµÄ¡°Ð¡Ðֵܡ±¾ÍʹÓÃAttached PropertyµÄ·½Ê½À´ÉèÖúͶÁÈ¡ÕâЩÊôÐÔµÄÖµ¡£
  
  Ò²ÐíÄãÎÊÕâÖÖ¡°È¨Á¦Ï·š±ÓÐʲôºÃ´¦£¬Èç¹ûÄã´ÓWPF×Ô´øµÄһЩ²¼¾Ö¿Ø¼þ»¹Ìå»á²»µ½ºÃ´¦µÄ»°£¬ÎÒÍÆ¼öÒ»¸öÁ´½Ó£¬´ó¼Ò¿ÉÒÔ¿´¿´¸÷ʽ¸÷ÑùµÄìÅ¿áµÄ×Ô¶¨ÒåLayout£º
  
  Why WPF Rocks (Custom Layout Panel Showcase)
  
  Æäʵ£¬Èç¹ûÄã¼á¶¨µÄÏëΪÿ¸ö¡°Ð¡Ðֵܡ±½¨Á¢Ò»¸öLeftºÍTopµÄ»°£¬ÄãÍêÈ«¿ÉÒÔ×Ô¼ºÊµÏÖÀàËÆÈçϵĴúÂ룺
  
  class MyFrameworkElement : FrameworkElement
  {
   public int Left { get; }
   public int Top { get; }
   //
  }
  
  class MyCanvas : Canvas
  {
   protected override Size ArrangeOverride(Size finalSize)
   {
   foreach (UIElement ele in InternalChildren)
   {
   MyFrameworkElement mele = ele as MyFrameworkElement;
   if (mele != null)
   {
   Rect itsRect = new Rect(
   new Point(mele.Left, mele.Top),
   ele.DesiredSize,
   ele.DesiredSize
   );
   ele.Arrange(itsRect);
   }
   }
   return base.ArrangeOverride(finalSize);
   }
  }
  
  
  ²»ÖªÄã¸Ð¾õÈçºÎ£¬·´ÕýÎÒ²»Ï²»¶ÕâÑùµÄʵÏÖ¡£MyFrameworkElementºÍMyCanvas±»Ç¿ñîºÏÔÚÒ»ÆðÁË£¬ÎÒ²»ÖªµÀDockPanel¿Ø¼þÊÇ·ñ»¹ÐèÒªLeftºÍTopÊôÐÔ£¬µ«ÊÇÕâÁ½¸öÊôÐÔȷʵ´æÔÚ£¬ÄѵÀÎÒÐèÒª¶¨ÒåMyFrameworkElementForCanvas,MyFrameworkElementForDockPanel...?Ì«¿Ö²ÀÁË
  
  ²»¹ý²åÒ»¾ä£¬WPFÖв¢Ã»ÓÐËùνµÄÌØ¶¨µÄ¡°²¼¾Ö¶ÔÏó¡±£¬Æäʵÿһ¸öÊÓ¾õ¶ÔÏó(Visual)¶¼¿ÉÒÔΪ×Ô¼ºµÄ×Ó¶ÔÏó(ÃÇ)°²ÅŲ¼¾Ö¡£
  
  ÐγÉģʽÅ׿ª²¼¾Ö²»Ì¸£¬´ÓÉè¼ÆÄ£Ê½ºÍÃæÏò¶ÔÏóµÄÉè¼ÆÀ´Ëµ£¬ÕâÖÖÉèÖÃÊôÐÔÖµµÄ·½Ê½¿ÉÒÔËãÒ»ÖÖºÜÓÐÒâÒåµÄģʽ£¬ËûºÜƯÁÁµÄ·ÖÀëÁËÊôÐÔ(Left)£¬ÓµÓÐÊôÐԵĶÔÏó(Element)£¬¶¨ÒåÊôÐԵĶÔÏó(Canvas)£¬ÊôÐÔÖµËÄÕßÖ®¼äµÄñîºÏ¹ØÏµ¡£DependencyPropertyºÍAttachedProperty²»½öÔÚlayout systemÖÐÓкܴóµÄÓô¦£¬ÔÚÊý¾Ý°ó¶¨£¬¶¯»­Ö§³Ö£¬×ÊÔ´£¬·ç¸ñµÈ¶¼ÓкܺõÄÓ¦Óá£
  
  µ±È»£¬Èκθ´ÔÓµÄÉè¼Æ¶¼ÊÇÓдú¼ÛµÄ£¬ÕâÖÖ·½Ê½×î´óµÄ´ú¼ÛÒ²ÐíÊÇÐÔÄÜ£¬ËäÈ»ÔÚÖµµÃ´æ´¢ÉÏWPF½øÐÐÁ˺ܶàÓÅ»¯£¨¿ÉÒԲο¼ÎÒµÄÁíһƪ¼´½«·¢²¼µÄPost£©£¬µ«ÐÔÄÜËðʧ¿Ï¶¨´æÔÚ¡£ÁíÒ»·½Ã棬¸´ÔÓµÄÉè¼Æ±Ø¶¨»áÔö¼ÓÓû§£¨ÎÒÃdzÌÐòÔ±£©Ê¹Óõĸ´ÔÓ¶È£¬Ò²¾ÍÊÇÎÒÃDZØÐëʹÓÃGetValue»òÕßÊÇSetValue·½·¨È¥»ñȡֵÁË¡£²»¹ýÔÚʹÓø´ÔÓ¶ÈÉÏÃæ£¬WPF½øÐÐÁËһЩ¹Ù·½µÄ¹æ·¶´¦Àí£¬ËûÏ£ÍûÆÕͨµÄDependencyProperty¶¼Äܱ»·â×°³ÉÃûΪ"CLR Wapper"µÄget/set·½·¨£¬AttachedProperty·â×°³ÉÀàËÆCanvas.SetLeft(v, 150) ÕâÑùµÄÓï·¨£¬ÓÚÊÇ£¬±ã³öÏÖÁËCanvas.SetLeft()ÕâÑùµÄ·½·¨¡£¡£
  
  ÁíÍâSilverlight±¾Éí»¹Ö»ÊÇBeta°æ±¾£¬ËùÒÔ×îºÃ±ðÄÃSilverlight˵ʶù¡£ºÇºÇ£¬ÎÒ»¹ÊǺÜϲ»¶WPF¡£
  
  
  ×ܽáÕâһƪPostÊ×ÏÈ´ÓWPFµÄ²¼¾Öϵͳ˵Æð£¬½éÉÜÁ˲¼¾ÖϵͳÖÐÊÇÈçºÎÓ¦ÓÃAttachedPropertyµÄ£¬È»ºó×ܽáµÄ²ûÊöÁËΪʲô»á³öÏÖCanvas.SetLeft()ÕâÑùµÄÓï·¨¡£
  ÒÔÉÏÊÇÎÒ¸öÈ˵ÄһЩ¿´·¨£¬Èç¹ûÓÐʲô²»¶ÔÏ£Íû´ó¼Ò¶à¶àÖ¸Õý~
  
    
ÎÄÕ¼È룺junsan    ÔðÈα༭£ºjunsan 
  • ÉÏһƪÎÄÕ£º
  • ÏÂһƪÎÄÕ£º
  • ×îÐÂÈȵã ×îÐÂÍÆ¼ö Ïà¹ØÎÄÕÂ
    ³õ³¢Deep Zoom Composer
    ¿ÉÀ©Õ¹µÄÎļþͬ²½Éè¼Æ
    QuickGUI±à¼­Æ÷ϵÁÐ---´ÓÎļþÖжÁÈ¡²¢½âÎö
    ½éÉÜWS Federaion ¶þ£º°Ñ°Ù¶ÈºÍ¹È¸èºÍгÆðÀ´
    ´úÂë×ÅÉ«--¹ØÓÚÑ­»·Óë·Ö×é
    My97ÈÕÆÚ¿Ø¼þ My97 DatePicker 4.0 Prerele¡­
    ½éÉÜ WS-Federation Ò»£º ÈÃPassportºÍ´«Í³¡­
    ½«Ìض¨¸ñʽµÄTXTÊý¾ÝÎļþдÈëEXCEL
    WPFÀïµÄDependencyProperty(4)
    ±à³ÌÓÎÏ·:»®È­»úÆ÷È˱ÈÈü
    ¡¡ÍøÓÑÆÀÂÛ£º£¨×îÐÂ10Ìõ¡£Ö»´ú±íÍøÓѹ۵㣬Óë±¾Õ¾Á¢³¡Î޹أ¡£©