По моему опыту, мы использовали объекты EF на бизнес-слое нашего приложения, но когда мы превратим переход на уровень представления через наш уровень служб WCF, мы создадим объекты представления из объектов EF.
В нашем случае, только представление передается уровню представления. Мы делаем это, чтобы управлять, как данные представлены, и примените защитную проверку для данных, входящих от уровня представления.
В случае ueing EF возражает в транзакции WCF, Вы потеряете контекст объекта, что объект EF был связан. Существуют некоторые усилия в CodePlex, которые пытаются помочь с этим, но я havn't не отставал от их усилий.
В Blackberry нет скинов, я знаю два способа добиться эффекта скина:
удалить мертвые изображения Imageshack ссылка - BlackBerry Theme Builder
Что вы можете делать с Theme Builder? Некоторые из его основных функций позволяют
Дизайн-макет
Программирование графического интерфейса может занять некоторое время, и если вы хотите решить некоторые вопросы при планировании графического интерфейса без программирования, вы можете захотеть нарисовать макет графического интерфейса.
Вы можете использовать бесплатные шаблоны Visio для прототипирования пользовательского интерфейса BlackBerry - v1.0 от ArtfulBits.
удалена мертвая ссылка на Imagehack
удалена мертвая ссылка на ImageshackСоздание пользовательского элемента управления
Создав пользовательский элемент управления, вы можете настроить
- размер элемента управления
- фигуру элемента управления
- фон элемента управления (цвет, изображение)
- контрольный шрифт (размер, стиль, цвет)
- контрольная граница (размер, стиль, цвет)
Все это для состояний
- отключено
- нормально
- сфокусировано
- активно (нажата )
В конце концов, вы можете просто снять кожу с вашего элемента управления, установив фоновое изображение
Основы
devsushi.com: Blackberry JDE API - Справочник по полю пользовательского интерфейса в основном дает представление о существующих элементах управления пользовательским интерфейсом Blackberry с кодами и снимками экрана.
ИТО: добавление элементов в ListField (BlackBerry)
ИТО: встроенный элемент управления HTML для Blackberry?
ИТО: Blackberry - как получить значение datetime из DateField?
ИТО: стилизация приложения BlackBerry для внешнего вида Подобно iPhoneДиспетчеры, макет
Даже при использовании стандартных элементов управления нам нужно расположить и сгруппировать так, как мы хотим, поэтому нам нужны настраиваемые менеджеры:
Thinking BlackBerry: BlackBerry UI - Создание базового полевого менеджера
Thinking BlackBerry: простой менеджер BlackBerry Grid Layout
Thinking BlackBerry: создание настраиваемого экрана, вертикальная прокрутка и многое другое
SO: Проблема прокрутки в приложении Blackberry
SO: BlackBerry - отображение текста Unicode
удалена неработающая ссылка на ImageShack - нарезана мультимедийная программа
удалена неработающая ссылка на ImageShack - Нарезанные изображения
Используйте расширение ButtonField для сопоставления изображений с кнопками:
class BitmapButtonField extends ButtonField {
Bitmap mNormal;
Bitmap mFocused;
Bitmap mActive;
int mWidth;
int mHeight;
public BitmapButtonField(Bitmap normal, Bitmap focused,
Bitmap active) {
super(CONSUME_CLICK);
mNormal = normal;
mFocused = focused;
mActive = active;
mWidth = mNormal.getWidth();
mHeight = mNormal.getHeight();
setMargin(0, 0, 0, 0);
setPadding(0, 0, 0, 0);
setBorder(BorderFactory
.createSimpleBorder(new XYEdges(0, 0, 0, 0)));
setBorder(VISUAL_STATE_ACTIVE, BorderFactory
.createSimpleBorder(new XYEdges(0, 0, 0, 0)));
}
protected void paint(Graphics graphics) {
Bitmap bitmap = null;
switch (getVisualState()) {
case VISUAL_STATE_NORMAL:
bitmap = mNormal;
break;
case VISUAL_STATE_FOCUS:
bitmap = mFocused;
break;
case VISUAL_STATE_ACTIVE:
bitmap = mActive;
break;
default:
bitmap = mNormal;
}
graphics.drawBitmap(0, 0, bitmap.getWidth(), bitmap.getHeight(),
bitmap, 0, 0);
}
public int getPreferredWidth() {
return mWidth;
}
public int getPreferredHeight() {
return mHeight;
}
protected void layout(int width, int height) {
setExtent(mWidth, mHeight);
}
}
Остальная часть кода:
class Scr extends MainScreen implements FieldChangeListener {
Bitmap mBmpHeader = Bitmap.getBitmapResource("header.png");
Bitmap mBmpCover = Bitmap.getBitmapResource("cover.png");
Bitmap mBmpTitle = Bitmap.getBitmapResource("title.png");
Bitmap mBmpTimeline = Bitmap.getBitmapResource("timeline.png");
Bitmap mBmpLeftside = Bitmap.getBitmapResource("leftside.png");
Bitmap mBmpPrevNrm = Bitmap.getBitmapResource("btn_prev_normal.png");
Bitmap mBmpPlayNrm = Bitmap.getBitmapResource("btn_play_normal.png");
Bitmap mBmpPauseNrm = Bitmap.getBitmapResource("btn_pause_normal.png");
Bitmap mBmpStopNrm = Bitmap.getBitmapResource("btn_stop_normal.png");
Bitmap mBmpNextNrm = Bitmap.getBitmapResource("btn_next_normal.png");
Bitmap mBmpPrevFcs = Bitmap.getBitmapResource("btn_prev_focused.png");
Bitmap mBmpPlayFcs = Bitmap.getBitmapResource("btn_play_focused.png");
Bitmap mBmpPauseFcs = Bitmap.getBitmapResource("btn_pause_focused.png");
Bitmap mBmpStopFcs = Bitmap.getBitmapResource("btn_stop_focused.png");
Bitmap mBmpNextFcs = Bitmap.getBitmapResource("btn_next_focused.png");
Bitmap mBmpRightside = Bitmap.getBitmapResource("rightside.png");
VerticalFieldManager mMainManager;
HorizontalFieldManager mHeaderManager;
HorizontalFieldManager mCoverManager;
HorizontalFieldManager mTitleManager;
HorizontalFieldManager mTimelineManager;
HorizontalFieldManager mToolbarManager;
BitmapField mHeader;
BitmapField mCover;
BitmapField mTitle;
BitmapField mTimeline;
BitmapField mLeftside;
BitmapField mRightside;
BitmapButtonField mBtnPrev;
BitmapButtonField mBtnPlay;
BitmapButtonField mBtnPause;
BitmapButtonField mBtnStop;
BitmapButtonField mBtnNext;
public Scr() {
add(mMainManager = new VerticalFieldManager());
addHeader();
addCover();
addTitle();
addTimeline();
addToolbar();
}
private void addHeader() {
mMainManager.add(mHeaderManager = new HorizontalFieldManager());
mHeaderManager.add(mHeader = new BitmapField(mBmpHeader));
}
private void addCover() {
mMainManager.add(mCoverManager = new HorizontalFieldManager());
mCoverManager.add(mCover = new BitmapField(mBmpCover));
}
private void addTitle() {
mMainManager.add(mTitleManager = new HorizontalFieldManager());
mTitleManager.add(mTitle = new BitmapField(mBmpTitle));
}
private void addTimeline() {
mMainManager.add(mTimelineManager = new HorizontalFieldManager());
mTimelineManager.add(mTimeline = new BitmapField(mBmpTimeline));
}
private void addToolbar() {
mMainManager.add(mToolbarManager = new HorizontalFieldManager());
mToolbarManager.add(mLeftside = new BitmapField(mBmpLeftside));
mToolbarManager.add(mBtnPrev = new BitmapButtonField(mBmpPrevNrm,
mBmpPrevFcs, mBmpPrevFcs));
mToolbarManager.add(mBtnPlay = new BitmapButtonField(mBmpPlayNrm,
mBmpPlayFcs, mBmpPlayFcs));
mBtnPlay.setChangeListener(this);
mBtnPause = new BitmapButtonField(mBmpPauseNrm, mBmpPauseFcs,
mBmpPauseFcs);
mBtnPause.setChangeListener(this);
mToolbarManager.add(mBtnStop = new BitmapButtonField(mBmpStopNrm,
mBmpStopFcs, mBmpStopFcs));
mToolbarManager.add(mBtnNext = new BitmapButtonField(mBmpNextNrm,
mBmpNextFcs, mBmpNextFcs));
mToolbarManager.add(mRightside = new BitmapField(mBmpRightside));
}
public void fieldChanged(Field field, int context) {
if (mBtnPlay == field)
play();
else if (mBtnPause == field)
pause();
}
private void pause() {
mToolbarManager.replace(mBtnPause, mBtnPlay);
}
private void play() {
mToolbarManager.replace(mBtnPlay, mBtnPause);
}
}
Ресурсы , к сожалению, не очень хороши. Лучшим источником информации обычно являются ссылки Google на блоги по конкретной теме, которую вы ищете.
Если вы только начинаете писать код BB GUI, я настоятельно рекомендую ознакомиться с Manager и Field , поскольку вам, вероятно, придется написать для них множество собственных расширений.