This does not compile for me:
isReadOnly.SetValue(attribute, Video);
This does compile but gives you incorrect behavior:
isReadOnly.SetValue(attribute, Volume);
Try it like this:
public class MenuProp
{
public void ChangeReadOnlyTo(bool readOnly)
{
PropertyDescriptor property;
ReadOnlyAttribute attribute;
FieldInfo isReadOnly;
property = TypeDescriptor.GetProperties(typeof(MenuProp))["Video"];
attribute = (ReadOnlyAttribute)property.Attributes[typeof(ReadOnlyAttribute)];
isReadOnly = attribute.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
isReadOnly.SetValue(attribute, readOnly);
property = TypeDescriptor.GetProperties(typeof(MenuProp))["Volume"];
attribute = (ReadOnlyAttribute)property.Attributes[typeof(ReadOnlyAttribute)];
isReadOnly = attribute.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
isReadOnly.SetValue(attribute, readOnly);
}
}
Also make sure that
UIPathEditor respects the value of the
ReadOnlyAttribute.