如何调整stacklayoutpanel的大小以适应其内容?

时间:2013-02-27 05:06:30

标签: winforms resize telerik

我已经搜索了telerik的网站一段时间了,但是没有找到关于如何调整stacklayoupanel以适应其元素的提及。有些属性允许调整大小以适应其元素;但是,这些属性对我不起作用。我想知道是否有人在这里使用过这个并且可以帮助我。我有一个列表视图,其listViewVisualItems不适合其内容。而是内容从下面的视觉项目“泄漏”并渗入下一个。 这是我的自定义项目类。

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;
    }

1 个答案:

答案 0 :(得分: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);
    }
}
}