Сохраните имена пользователей, как было предложено Фрэнком, но когда вы сохраняете имена пользователей, используйте функцию runTransaction в Firebase, чтобы убедиться, что имя пользователя не занято. Эта функция гарантируется Firebase как атомная операция, поэтому вы можете быть уверены в отсутствии столкновения
firebaseRef.child("usernames").child(username).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if (mutableData.getValue() == null) {
mutableData.setValue(authData.getUid());
return Transaction.success(mutableData);
}
return Transaction.abort();
}
@Override
public void onComplete(FirebaseError firebaseError, boolean commited, DataSnapshot dataSnapshot) {
if (commited) {
// username saved
} else {
// username exists
}
}
});
Атрибут ThemeInfo указывает, где механизм автоматического создания тем должен искать словари тем и общий словарь. Для каждого параметра можно задать одно из следующих значений:
. .dll
, где
- это текущая сборка
имя. Если словари темы определяют стили для элементов управления, которые определены во внешних сборках, например, элементы управления WPF, такие как System.Windows.Controls.ProgressBar
и System.Windows.Button
, то необходимо использовать ThemeDictionaryExtension
, чтобы указать приложение в качестве источника словарей тем.
WPF framework использует этот атрибут в библиотеках элементов управления как удобный способ применения ресурсов к элементам управления.
Учтите, что Windows может работать с разными темами пользовательского интерфейса (Aero - один из таких примеров). Элементы управления WPF, предоставляемые Microsoft, изменяют свой внешний вид для разных тем среды.
Если ваше приложение требует такого поведения, вы можете создать различные словари тем в папке themes
вашего проекта библиотеки элементов управления.
] Даже если вам не нужна поддержка нескольких тем, удобно поместить ресурсы в файл generic.xaml
, чтобы они были доступны для элементов управления в сборке.