0

テレリックのサイトをしばらく検索しましたが、要素に合わせてスタックレイアウトパネルのサイズを変更する方法についての言及が見つかりません。要素に合わせてサイズ変更できるプロパティがあります。ただし、これらのプロパティは機能しません。これを使用していて、私を助けてくれる人がここにいるのだろうかと思っていました。コンテンツに適合しない 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;
    }
4

1 に答える 1

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);
    }
}
}
于 2013-02-27T08:00:18.923 に答える