2014-10-21 4 views
0

Я инициализирую объект с несколькими свойствами. Однако есть несколько свойств, которые всегда одинаковы (стилизация).Call self in object construction

Рассмотрим следующий блок инициализации кода:

private static Button _saveButton = new Button 
{ 
    Text = "Save", 
    HorizontalOptions = LayoutOptions.Center, 
    WidthRequest = 500, 
    IsVisible = false 
    //applyStandard(this) ? 
}; 

Я хотел бы передать _saveButton к способу, который изменяет свою TextColor и BorderColor свойство с чем-то вроде void applyStandard(View v).

Как я мог сделать это, если это возможно?

+0

Создать статический метод в классе Button, который делает то, что вам нужно? – Logard

+1

Создайте подтип; или создать метод, который возвращает новую кнопку. – poke

+1

Вы не можете сделать это в инициализаторе объекта. – DavidG

ответ

0

Вы не можете сделать это в инициализаторе объекта. Вам нужно отделить вызов метода от инициализации.

+0

+1 Что случилось в этом ответе? –

+0

@AdrianoRepetti Я предполагаю, что 1-это уже было сказано в комментариях и 2-он не дает альтернативного решения? – DavidG

3

Вы не можете получить доступ к экземпляру кнопки в инициализаторе, но вы можете сделать метод расширения, который вы называете сразу после него:

public static class Extensions { 

    public static Button ApplyStandard(this Button button) { 
     button.TextColor = Colors.Red; 
     return button; 
    } 

} 

Возвращая кнопку от метода расширения, вы можете приковать его в создании:

private static Button _saveButton = new Button { 
    Text = "Save", 
    HorizontalOptions = LayoutOptions.Center, 
    WidthRequest = 500, 
    IsVisible = false 
}.ApplyStandard(); 
0

У вас там почти что, я думаю, что вы приближаетесь к проблеме из-за неправильного направления. Как уже упоминалось, вы не можете делать то, что вы предлагаете с синтаксисом инициализации объекта. Самый простой способ решить вашу проблему (без простого создания собственного типа кнопки) - это иметь метод, который создает кнопку, и устанавливает все ваши общие свойства. Затем вы можете установить любой из остальных на основе каждого экземпляра:

private static Button CreateCustomButton() 
{ 
    Button button = new Button(); 
    button.ForeColor = Color.Black; 
    // set other properties, initial setup etc... 

    return button; 
}