In monotouch.dialog can RootElement be easily styl

2019-05-30 23:31发布

问题:

Are there any existing extensions or is it fairly straight forward to add styles to RootElement in monotouch.dialog in a similar way you can style StyledStringElement.

Basically I would like to add an image, or badge to RootElement to indicate what sort of details would be in the child view, eg add Success, Warning, Error, Info type image - so the users may only be interested in clicking through to details that are not fully successful.

So ideally I would be able to code something like this...

UIImage imageSuccess = ImageLoader.DefaultRequestImage (new Uri ("file://" + Path.GetFullPath ("Images/Success.png")), null);

var root = new RootElement("Root") {
                Image = imageSuccess,
                Accessory = UITableViewCellAccessory.DetailDisclosureButton,
                new Section (){
                    new BooleanElement ("Airplane Mode", false),
                    new RootElement ("Notifications") {
                        new Section (null, "Turn off Notifications")
                        {
                            new BooleanElement ("Notifications", false)
                        }
                    }}
            };

Thanks for any help or pointers.

回答1:

This question is old, but if anyone else comes across it you can subclass the RootElement class to add an icon. My code is as follows:

    public class ImageRootElement : RootElement
    {
        private UIImage _image;

        public override MonoTouch.UIKit.UITableViewCell GetCell (MonoTouch.UIKit.UITableView tv)
        {
            var baseCell = base.GetCell (tv); 
            var cell = new UITableViewCell (UITableViewCellStyle.Subtitle, "cellId");
            cell.TextLabel.Text = Caption;

            cell.Accessory = baseCell.Accessory;
            cell.ImageView.Image = _image;
            return cell;
        }

        public ImageRootElement (string caption, UIImage image) : base(caption)
        {
            _image = image;
        }   
    }


回答2:

Since MT.Dialog is open source, you can modify the RootElement properties and constructors however you like. I don't think there's anything that does what you want right out of the box, so you'll have to extend Dialog to meet your needs.

As an aside, it sounds like you MAY be misunderstanding the intent of RootElement. RootElement is simply the main container that all of your sections and elements are in. It doesn't seem to make sense to have a disclosure indicator or badge on a RootElement, simply because that is not the intent of RootElement. It's possible that I could just be misunderstanding you. If, however, you want to do custom styling with badges, etc, on an element, you can create custom element classes that inherit from OwnerDrawnElement, overriding it's two abstract methods. However, read Miguel's answer to a similar question here before doing so.