2013-02-27 137 views
0

我在telerik的網站上搜索了一段時間,找不到任何關於如何調整stacklayoupanel以適應其元素的提及。有些屬性允許調整大小以適應其元素;但是,這些屬性不適合我。我想知道是否有誰在這裏使用過這個,可以幫助我。我有一個listViewVisualItems列表視圖不符合他們的內容。而是內容從下面的視覺項目中「泄漏」出來並滲入到下一個視覺項目中。 這是我的自定義項目類。如何調整stacklayout面板的大小以適應其內容?

public class ChargePlotListViewItem : SimpleListViewVisualItem 
{ 
    private LightVisualElement imageElement; 
    private LightVisualElement titleElement; 
    private LightVisualElement bioElement; 
    private StackLayoutPanel stackLayout; 

    protected override void CreateChildElements() 
    { 
     base.CreateChildElements(); 

     stackLayout = new StackLayoutPanel(); 
     stackLayout.Orientation = System.Windows.Forms.Orientation.Vertical; 
     //stackLayout.AutoSize = true; These do not work 
     //stackLayout.AutoSizeMode = RadAutoSizeMode.WrapAroundChildren; 

     imageElement = new LightVisualElement(); 
     imageElement.DrawText = false; 
     imageElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; 
     //imageElement.StretchVertically = false; 
     imageElement.Margin = new System.Windows.Forms.Padding(1, 1, 1, 2); 
     imageElement.ShouldHandleMouseInput = false; 
     imageElement.NotifyParentOnMouseInput = true; 
     imageElement.AutoSizeMode = RadAutoSizeMode.FitToAvailableSize; 

     //stackLayout.Children.Add(imageElement); 

     titleElement = new LightVisualElement(); 
     titleElement.TextAlignment = ContentAlignment.TopCenter; 
     titleElement.Margin = new Padding(2, 1, 1, 2); 
     titleElement.Font = new System.Drawing.Font("Segoe UI", 8, FontStyle.Italic, GraphicsUnit.Point); 
     titleElement.ShouldHandleMouseInput = false; 
     titleElement.NotifyParentOnMouseInput = true; 
     stackLayout.Children.Add(titleElement); 

     bioElement = new LightVisualElement(); 
     bioElement.TextAlignment = ContentAlignment.BottomLeft; 
     bioElement.ShouldHandleMouseInput = false; 
     bioElement.NotifyParentOnMouseInput = true; 
     bioElement.Margin = new Padding(2, 1, 1, 2); 

     bioElement.Font = new System.Drawing.Font("Segoe UI", 9, FontStyle.Regular, GraphicsUnit.Point); 
     bioElement.ForeColor = Color.FromArgb(255, 114, 118, 125); 
     stackLayout.Children.Add(bioElement); 

     this.Children.Add(stackLayout); 
     //this.stackLayout.Measure(new System.Drawing.SizeF((float)stackLayout.Size.Width, (float)20)); 

     this.Padding = new Padding(1, 2, 1, 2); 
     this.Shape = new RoundRectShape(3); 
     this.BorderColor = Color.Black; 
     this.BorderGradientStyle = GradientStyles.Solid; 
     this.DrawBorder = true; 
     this.DrawFill = true; 
     this.BackColor = Color.Azure; 
     this.GradientStyle = GradientStyles.Solid; 
    } 


    protected override void SynchronizeProperties() 
    { 
     base.SynchronizeProperties(); 

     frmBingMaps.CriminalPlotObject plotObject = this.Data.Value as frmBingMaps.CriminalPlotObject; 
     if (plotObject != null) 
     { 
      try 
      { 
       this.imageElement.Image = Crime_Information_System.Properties.Resources 
        .bullet_blue; 
      } 
      catch 
      { 
      } 

      //building the title for the element depending on which names are on record 
      StringBuilder NameBuilder = new StringBuilder(); 
      if (plotObject.Data.FirstName != null | plotObject.Data.FirstName != string.Empty) 
       NameBuilder.Append(plotObject.Data.FirstName + " "); 

      if (plotObject.Data.LastName != null | plotObject.Data.LastName != string.Empty) 
       NameBuilder.Append(plotObject.Data.LastName + " "); 
      //NameBuilder.Append(" Charge: " + gangBanger.Incidents[0].Charges[0].ChargeDescription); 

      this.titleElement.Text = NameBuilder.ToString(); 

      StringBuilder BioBuilder = new StringBuilder(); 
      //this.radDesktopAlert1.ContentText = "<html><b>" + CentralDataStore.AllUsers.Find(P => P.intUserID 
      // == BLAH.SenderID).strFirstName + " " + CentralDataStore.AllUsers.Find(P => P.intUserID == 
      //  BLAH.SenderID).strLastName + "</b><br>" + BLAH.Subject; 
      BioBuilder.Append("<html>"); 
      BioBuilder.Append("<b>Incident ID</b>: " + plotObject.Data.Incidents.Find(
       P => P.IncidentID == plotObject.CaseID).IncidentID.ToString()); 
      BioBuilder.Append("<br>"); 
      BioBuilder.Append("<b>Date</b>: " + plotObject.Data.Incidents.Find(
       P => P.IncidentID == plotObject.CaseID).DateOfIncident.ToShortDateString()); 
      BioBuilder.Append("<br>"); 
      BioBuilder.Append(plotObject.Data.Incidents.Find(P => P.IncidentID == plotObject 
       .CaseID).Description); 
      BioBuilder.Append("<br>"); 
      //BioBuilder.Append("\r\n"); 
      BioBuilder.Append("<b>Location</b>: "); 
      BioBuilder.Append(plotObject.Data.Incidents.Find(P => P.IncidentID == 
       plotObject.CaseID).Location); 

      BioBuilder.Append("<br>"); 
      //BioBuilder.Append("\r\n"); 
      BioBuilder.Append(string.Format("<b>Charges</b>: ")); 

      foreach (Charge c in plotObject.Data.Incidents.Find(P => P.IncidentID == plotObject.CaseID 
       ).Charges) 
      { 
       BioBuilder.Append(c.ChargeDescription + ", "); 
      } 

      BioBuilder.Remove(BioBuilder.Length - 2,2); 
      //BioBuilder.Append(" 
      bioElement.Text = BioBuilder.ToString(); 

      this.Text = ""; //here to erase the system.crimesysteminformation.plot blah object name 

     } 
    } 

    protected override Type ThemeEffectiveType 
    { 
     get 
     { 
      return typeof(IconListViewVisualItem); 
     } 
    } 

    protected override SizeF MeasureOverride(SizeF availableSize) 
    { 
     SizeF measuredSize = base.MeasureOverride(availableSize); 
     this.stackLayout.Measure(measuredSize); 
     return measuredSize; 
    } 

    protected override SizeF ArrangeOverride(SizeF finalSize) 
    { 
     base.ArrangeOverride(finalSize); 
     this.stackLayout.Arrange(new RectangleF(PointF.Empty, finalSize)); 
     return finalSize; 
    } 

回答

0

爲了克服這個問題,請考慮讓項目通過設置以下屬性,把他們所需的大小:

radListView1.AllowArbitraryItemHeight = true; 

爲方便起見,這裏是你的代碼的動作的簡化版本:

void radListView1_VisualItemCreating(object sender, ListViewVisualItemCreatingEventArgs  e) 
{ 
e.VisualItem = new ChargePlotListViewItem(); 
} 

public class ChargePlotListViewItem : SimpleListViewVisualItem 
{ 
private LightVisualElement imageElement; 
private LightVisualElement titleElement; 
private LightVisualElement bioElement; 
private StackLayoutPanel stackLayout; 

protected override void CreateChildElements() 
{ 
    base.CreateChildElements(); 

    stackLayout = new StackLayoutPanel(); 
    stackLayout.Orientation = System.Windows.Forms.Orientation.Vertical; 

    imageElement = new LightVisualElement(); 
    imageElement.DrawText = false; 
    imageElement.ImageLayout = System.Windows.Forms.ImageLayout.Center; 
    imageElement.ShouldHandleMouseInput = false; 
    imageElement.NotifyParentOnMouseInput = true; 

    stackLayout.Children.Add(imageElement); 

    titleElement = new LightVisualElement(); 
    titleElement.TextAlignment = ContentAlignment.TopCenter; 
    titleElement.Font = new System.Drawing.Font("Segoe UI", 8, FontStyle.Italic, GraphicsUnit.Point); 
    titleElement.ShouldHandleMouseInput = false; 
    titleElement.NotifyParentOnMouseInput = true; 
    stackLayout.Children.Add(titleElement); 

    bioElement = new LightVisualElement(); 
    bioElement.TextAlignment = ContentAlignment.BottomLeft; 
    bioElement.ShouldHandleMouseInput = false; 
    bioElement.NotifyParentOnMouseInput = true; 
    bioElement.Margin = new Padding(2, 1, 1, 2); 
    bioElement.Font = new System.Drawing.Font("Segoe UI", 9, FontStyle.Regular, GraphicsUnit.Point); 
    bioElement.ForeColor = Color.FromArgb(255, 114, 118, 125); 

    stackLayout.Children.Add(bioElement); 

    this.Children.Add(stackLayout); 
} 

protected override void SynchronizeProperties() 
{ 
    base.SynchronizeProperties(); 
    DataRowView rowView = this.Data.DataBoundItem as DataRowView; 

    imageElement.Image = (Image)rowView.Row["Image"]; 
    titleElement.Text = rowView.Row["Title"].ToString(); 
    bioElement.Text = rowView.Row["Bio"].ToString(); 
    this.Text = ""; //here to erase the system.crimesysteminformation.plot blah object name 
} 

protected override Type ThemeEffectiveType 
{ 
    get 
    { 
     return typeof(IconListViewVisualItem); 
    } 
} 
} 
+0

完美運作。 Thankyou checho。 – Adrian 2013-02-27 16:24:26

+0

不客氣 – checho 2013-04-11 08:31:57

相關問題