2

我正在使用 MonoTouch.Dialog 创建一个类似设置的页面。下面的 linq 创建了一组 RootElement,每个都有一个部分,其中包含一组 RadioEventElement(我为添加 OnSelected 事件而创建的 RadioElement 的子类)。

        // initialize other phone settings by creating a radio element list for each phone setting
        var elements = (from ps in PhoneSettings.Settings.Keys select (Element) new RootElement(ps, new RadioGroup(null, 0))).ToList();

        // loop through the root elements we just created and create their substructure
        foreach (RootElement rootElement in elements)
        {
            rootElement.Add(new Section()
            {
                (from val in PhoneSettings.Settings[rootElement.Caption].Values select (Element) new RadioEventElement(val.Name)).ToList()
            });
            // ...
        }       

我实现的设置之一是“主题”——目前它只是应用程序中各种屏幕的背景颜色。我可以通过将 TableView.BackgroundColor 属性设置为所需的颜色来正确设置每个页面的样式...除了新的 DialogViewControllers,它是在导航到单选组时由父 DialogViewController 自动创建和推送的。

有没有办法设置这个子 DialogViewController 的样式(或至少设置背景颜色)?

4

2 回答 2

4

在问简单的问题之前,我需要更多地使用程序集浏览器:-)

幸运的是,RootElement 有一个名为 PrepareDialogViewController 的虚拟方法似乎正是用于此目的。我所要做的就是创建一个简单的 RootElement 子类并重写此方法以获得我想要的行为。

public class ThemedRootElement : RootElement 
{    
    public ThemedRootElement(string caption) : base (caption)
    {
    }

    public ThemedRootElement(string caption, Func<RootElement, UIViewController> createOnSelected) : base (caption, createOnSelected)
    {
    }

    public ThemedRootElement(string caption, int section, int element) : base (caption, section, element)
    {
    }

    public ThemedRootElement(string caption, Group group) : base (caption, group)
    {
    }

    protected override void PrepareDialogViewController(UIViewController dvc)
    {
        dvc.View.BackgroundColor = UIColorHelper.FromString(App.ViewModel.Theme.PageBackground);
        base.PrepareDialogViewController(dvc);
    }
}

希望这有助于节省一些时间......

于 2012-05-10T18:17:42.620 回答
1

为了让它工作,我必须重写该MakeViewController方法并将通常返回的 UIViewController 转换为 UITableViewController,然后进行编辑。

protected override UIViewController MakeViewController()
{
    var vc = (UITableViewController) base.MakeViewController();

    vc.TableView.BackgroundView = null;
    vc.View.BackgroundColor = UIColor.Red; //or whatever color you like
    return vc;
}
于 2013-05-19T22:06:54.777 回答