See the question and my original answer on StackOverflow

The property grid does not allow that and you cannot customize it to do so using any official way.

However, here is some sample code that seems to work. It uses a TypeConverter to reduce the value from the grid's size.

Use at your own risk as it relies on PropertyGrid's internal methods and may have an impact on performance, since it requires a refresh on the whole grid on each resize.

public partial class Form1 : Form
    public Form1()

        // note this may have an impact on performance
        propertyGrid1.SizeChanged += (sender, e) => propertyGrid1.Refresh();

        var t = new Test();
        t.MyStringProperty = "The quick brown fox jumps over the lazy dog";
        propertyGrid1.SelectedObject = t;


public class AutoSizeConverter : TypeConverter
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        if (value == null)
            return null;

        // small trick to get PropertyGrid control (view) from context
        var view = (Control)context.GetService(typeof(IWindowsFormsEditorService));

        // bigger trick (hack) to get value column width & font
        int width = (int)view.GetType().GetMethod("GetValueWidth").Invoke(view, null);
        var font = (Font)view.GetType().GetMethod("GetBoldFont").Invoke(view, null); // or GetBaseFont

        // note: the loop is not super elegant and may probably be improved in terms of performance using some of the other TextRenderer overloads
        string s = value.ToString();
        string ellipsis = s;
            var size = TextRenderer.MeasureText(ellipsis, font);
            if (size.Width < width)
                return ellipsis;

            s = s.Substring(0, s.Length - 1);
            ellipsis = s + "...";
        while (true);

public class Test
    // we use a custom type converter
    public string MyStringProperty { get; set; }

Here is the result (supports resize):

enter image description here