Как создать ImageSource программно

Для того чтобы загрузить изображение нужен ImageSource,

SomeImage.ImageSource = new BitmapImage(
new Uri(@"images\img.png", UriKind.Relative));

Для Windows RT

Image img = new Image();
img.Source = new Windows.UI.Xaml.Media.Imaging.BitmapImage(
new Uri("ms-appx:/Assets/Logo.png"));

 

Локализация Windows 8 и Windows Phone приложений с помощью Multilingual App Toolkit

Перед началом нужно выключить Multilingual App Toolkit    для проекта. Для этого нужно выделить проект зайти в меню Tool и выбрать там Enable Multilingual App Toolkit. 

Для простой локализации достаточно сделать следующее:
1. Создать папку Resources.
2. В ней создать папки с культурами для которых есть локализация например: en-US(Для  Multilingual App Toolkit   обязательно должен быть en-US именно его он и переводит на другие языки).
3. В папке с культурой создать файл с ресурсами ( .resw ) например loc.resw.
4. Использовать в коде, указав в скобках нужный ресурс ( например у вас локализация разбита на несколько файлов)

var loader = new Windows.ApplicationModel.Resources.ResourceLoader("loc");
tbx.Text += loader.GetString("test");

Если имя файла ресуров Resources.resw
То его имя можно не указывать:

var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
tbx.Text += loader.GetString("test");

 Для XAML нужно использовать UID

<TextBlock x:Uid="Greeting" Text="" />

А в файле ресурсов имя должно быть Greeting.Text

Фишка Multilingual App Toolkit  в том что он позволяет переводить ваши уже созданные ресурсы на разные языки.
Теперь подробнее как это сделать:
1. Установить Multilingual App Toolkit  (ссылка ниже)
2. Зайти в Tools и выбрать Enable Multilingual App Toolkit 
3. Нажать правой кнопкой на проекте и выбрать Add Translation Language
4. Выбрать нужные языки.
5. У вас появиться файлы в папке MultilingualResources
6. Сделать ребил проекта.
7. Когда вы попытаетесь открыть файлы .xlf то увидете там строки из ваших ресурсов.
8. Теперь нужно перевести эти строки, можно отправить переводчику, все это есть в MSDN ссылке.
9. Нажать сохранить в редакторе.

Дальше все работает само. Важный момент английский язык все таки берётся из вашего оригинального файла локализации.

 А для задания языка можно сделать так:

Windows.Globalization.ApplicationPreferences.PreferredLanguage = "en";
this.Frame.Navigate(this.GetType());

Текущий язык можно получить из CultureInfo.

также еще можно сделать так:

public static String appForceCulture = "qps-PLOC"; 
// тут должна быть локаль (например ru-RU)
Thread.CurrentThread.CurrentCulture = 
new CultureInfo(appForceCulture);

 

 

 MSDN:

 http://blogs.msdn.com/b/developer-tools-rus/archive/2012/11/21/visual-studio-2012-windows.aspx

 http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh965329.aspx

 http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh965323.aspx

 

Далее: http://msdn.microsoft.com/en-us/library/windows/apps/jj569303.aspx

Если у вас не стоит Multilingual App Toolkit for Visual Studio 2012 то его можно скачать отсюда:

http://msdn.microsoft.com/en-us/windows/apps/hh848309

 

еще:

http://blogs.windows.com/windows_phone......-apps-part1.aspx

http://blogs.windows.com/windows_phone/b/wpdev/archive.....-phone-apps-part-2.aspx

Локализация Windows Phone приложений

Для того чтобы локализовать ваше приложение вам нужны файлы с ресурсами (resx) в которых находиться строки локализации.
1. Для начала в проекте нужно создать папку Resources.
2. В ней создать файл ресурсов AppResources.resx (тут будет локализация по умолчанию).
3. Дальше жмем правкой кнопкой мыши на проекте, выбираем Properties. В разделе Application и в блоке Supported Cultures отмечаем галочками языки которые мы будем поддерживать. Студия сама создаст файлы ресурсов с нужными именами.
4. Открываем созданные файлы ресурсов в верху  в Access Modifier ставим Public чтобы иметь доступ к ресурсам их кода.
После этих действий нужно пересобрать проект.

Доступ к ресурсам в коде:
1. Добавить в using  ссылку на ресурсы:

using WPTestApp.Resources;


И испльзовать в коде, обращаясь по имени которое находиться в файле ресуровс в столбике Name:

string str =  AppResources.test;

Доступ к ресурсам в XAML разметке:
1. Для начала нам нужно сделать класс для получения строк из файла ресурсов:

namespace WPTestApp.Resources
{
public class AppResourcesHelper
{
private static AppResources appRes = new AppResources();
public AppResources AppResources
{
get { return appRes; }
}
}
}


2. Дальше в App.xaml нужно добавить в раздел  Application:

xmlns:res="clr-namespace:WPTestApp.Resources"


3. И в Applocation.Resources добавить:

<Application.Resources>
<ResourceDictionary>
<res:AppResourcesHelper x:Key="AppResourcesHelper"></res:AppResourcesHelper>
</ResourceDictionary>
</Application.Resources>


4.Использование:

<TextBlock x:Name="ApplicationTitle" 
Text="{Binding Path=AppResources.test, 
Source={StaticResource AppResourcesHelper}}"/>

 

Для локализации название приложения (App Title) нужно:

Скачать прекрасное приложение которое будет генерировать нам файлы ресурсов
Вот отсюда: http://patrickgetzmann.wordpress.com/wp7-localize/
В этой программе мы указываем название приложения, далее оно его автоматически переводить на другие языки, мы если хотим то правим и жмем Save DLLs.

После чего получаем библиотек и кучу файлов, для удобства положим их в папку Resources (или еще куда), добавим их в проект, для всех файлов укажем что Build Action – Content.
Далее, идем в папку Properties и открываем WMAppManifest.xml.
В поле Display Name пишем - @Resources/AppResLib.dll,-100
А в Tile Title - @Resources/AppResLib.dll,-200
Главное без пробелов.

 Все. Теперь в зависимости от локали вы получите локализированное называние приложения.

Как скомпилировать wxWidgets для Windows и Visual Studio 2012

Как бы вы не получили исходные коды wxWidgets их нужно скомпилировать для использования.

Для того нужно сделать следующее:
1. Найти и запустить консоль Developer Command Prompt for VS2012.
2. Перейти в ней в папку с распакованным wxWidgets, в папку build, а затем в папку msw. (например D:\wxWidgets\build\msw)
3. Для Debug версии выполнить:
4. nmake /f makefile.vc target_cpu=i386 build=debug unicode=1
5. Для Release версии выполнить:
6. nmake /f makefile.vc target_cpu=i386 build=release unicode=1 cppflag="/Ox /Os"
Если у вас x64 версия то для нее тоже нужно компилировать, для этого нужно найти и запустить 64 битную консоль которая называется - Open VS2012 x64 Native Tools Command Prompt.
И сделать тоже самое, для debug и release.
После того когда все скомпилируется, для проверки можно запустить проект из папки wxWidgets\samples\minimal.
Если проект скомпилироваться то все хорошо. Можно работать.
Кстати, чтобы вашему приложению небыли нужны установленные VS Redistributable перед компиляцией в файле config.vc который находиться в папке build\msw нужно найти параметр
RUNTIME_LIBS = dynamic
И заменить dynamic на static

Описание форматов C# String.Format()

Выравнивание:
String.Format(“->{1,10}<-”, “Hello”); -> Hello<-
String.Format(“->{1,-10}<-”, “Hello”); ->Hello <-

 

String.Format("{0:00}",i);

Числа:

Базовые спецификаторы: 

Specifier Type Format Output (Passed Double 1.42) Output (Passed Int -12400)
c Currency {0:c} $1.42 -$12,400
d Decimal (Whole number) {0:d} System.FormatException -12400
e Scientific {0:e} 1.420000e+000 -1.240000e+004
f Fixed point {0:f} 1.42 -12400.00
g General {0:g} 1.42 -12400
n Number with commas for thousands {0:n} 1.42 -12,400
r Round trippable {0:r} 1.42 System.FormatException
x Hexadecimal {0:x4} System.FormatException cf90

Дополнительные спецификаторы:

Specifier Type Example Output (Passed Double 1500.42) Note
0 Zero placeholder {0:00.0000} 1500.4200 Pads with zeroes.
# Digit placeholder {0:(#).##} (1500).42  
. Decimal point {0:0.0} 1500.4  
, Thousand separator {0:0,0} 1,500 Must be between two zeroes.
,. Number scaling {0:0,.} 2 Comma adjacent to Period scales by 1000.
% Percent {0:0%} 150042% Multiplies by 100, adds % sign.
e Exponent placeholder {0:00e+0} 15e+2 Many exponent formats available.
; Group separator see below    

 

Дата и время:

Обратите внимание, что форматирование даты зависит от региональных настроек системы.

Specifier Type Example (Passed System.DateTime.Now)
d Short date 10/12/2002
D Long date December 10, 2002
t Short time 10:11 PM
T Long time 10:11:29 PM
f Full date & time December 10, 2002 10:11 PM
F Full date & time (long) December 10, 2002 10:11:29 PM
g Default date & time 10/12/2002 10:11 PM
G Default date & time (long) 10/12/2002 10:11:29 PM
M Month day pattern December 10
r RFC1123 date string Tue, 10 Dec 2002 22:11:29 GMT
s Sortable date string 2002-12-10T22:11:29
u Universal sortable, local time 2002-12-10 22:13:50Z
U Universal sortable, GMT December 11, 2002 3:13:50 AM
Y Year month pattern December, 2002

The ‘U’ specifier seems broken; that string certainly isn’t sortable.

Дополнительное форматирование даты:

Specifier Type Example Example Output
dd Day {0:dd} 10
ddd Day name {0:ddd} Tue
dddd Full day name {0:dddd} Tuesday
f, ff, … Second fractions {0:fff} 932
gg, … Era {0:gg} A.D.
hh 2 digit hour {0:hh} 10
HH 2 digit hour, 24hr format {0:HH} 22
mm Minute 00-59 {0:mm} 38
MM Month 01-12 {0:MM} 12
MMM Month abbreviation {0:MMM} Dec
MMMM Full month name {0:MMMM} December
ss Seconds 00-59 {0:ss} 46
tt AM or PM {0:tt} PM
yy Year, 2 digits {0:yy} 02
yyyy Year {0:yyyy} 2002
zz Timezone offset, 2 digits {0:zz} -05
zzz Full timezone offset {0:zzz} -05:00
: Separator {0:hh:mm:ss} 10:43:20
/ Separator {0:dd/MM/yyyy} 10/12/2002

Перечисления:

 

Specifier Type
g Default (Flag names if available, otherwise decimal)
f Flags always
d Integer always
x Eight digit hex.

Пример:

String.Format(“{0:$#,##0.00;($#,##0.00);Zero}”, value);

This will output “$1,240.00″ if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string “Zero” if the number is zero.

String.Format(“{0:(###) ###-####}”, 8005551212);

This will output “(800) 555-1212″.

Подробнее:

http://blog.stevex.net/string-formatting-in-csharp/

http://msdn.microsoft.com/ru-ru/library/26etazsy.aspx

Параметры функции C# .ToString()

Перевод чисел в денежную валюту (Currency). Результат зависит от региональных настроек операционной системы: 

double number1 = 45.7;
string currency1 = number1.ToString("c"); // Значение: 47,70р. или $47.70 и т.д.
double number2 = 45.74;
string currency2 = number2.ToString("c3"); // Значение: 45.745р. или $47.745 и т.д.


 Отображение разрядов у целочисленного числа (Digital)

int number = 45;
string digits = number.ToString("d"); // Значение: "45"         
int number2 = -136;
string digits2 = number2.ToString("d6"); // Значение: "-000136"


 

Отображение чисел после плавающей точки (Fixed-point)

double number1 = 45.123;
string float1 = number1.ToString("f"); // Значение: "45,12" (рус) 
double number2 = -45.1;s
tring float2 = number2.ToString("f3"); // Значение: "-45,100" (рус)


 

Отображение разделителей групп (Number)

double number = -55645.1;
string group = number.ToString("n"); // Значение: "-55 645,10" (рус)


 

Отображение процентов (Percent) 
 

double number1 = 0.45;
string percent1 = number1.ToString("p"); // Значение: "45,00%" (рус) 
double number2 = -0.451;
string percent2 = number2.ToString("p1"); // Значение: "-45,1%" (рус)


 

Отображение целочисленного значения в 16-разрядной системе (Hexademal)

 

int number1 = 255;
string hex1 = number1.ToString("x"); // Значение: "ff" 
int number2 = 255;
string hex2 = number2.ToString("X"); // Значение: "FF" 
int number3 = 255;
string hex3 = number3.ToString("X8"); // Значение: "000000FF"

Кроме этого можно управлять форматом чисел:

i.ToString("00");

 Это значит что  например чило "5" будет представлено как "05".

 

 Таблица с MSDN в которой представлены форматы: 

Описатель формата

Имя

Описание

Примеры

"0"

Знак-заместитель нуля

Заменяет ноль соответствующей цифрой, если такая имеется. В противном случае в результирующей строке будет стоять ноль.

Дополнительные сведения: Настраиваемый описатель "0".

1234.5678 ("00000") -> 01235

0.45678 ("0.00", en-US) -> 0.46

0.45678 ("0.00", fr-FR) -> 0,46

"#"

Заместитель цифры

Заменяет знак "#" соответствующей цифрой, если такая имеется. В противном случае в результирующей строке цифра стоять не будет.

Дополнительные сведения: Настраиваемый описатель "#".

1234.5678 ("#####") -> 1235

0.45678 ("#.##", en-US) -> .46

0.45678 ("#.##", fr-FR) -> ,46

"."

Разделитель

Определяет расположение разделителя целой и дробной частей в результирующей строке.

Дополнительные сведения см. в разделе Настраиваемый описатель ".".

0.45678 ("0.00", en-US) -> 0.46

0.45678 ("0.00", fr-FR) -> 0,46

","

Разделитель групп и масштабирование чисел

Служит в качестве описателя разделителя групп и описателя масштабирования чисел. В качестве разделителя групп вставляет локализованный символ-разделитель групп между всеми группами. В качестве описателя масштабирования чисел делит число на 1000 для всех указанных запятых.

Дополнительные сведения: Настраиваемый описатель ",".

Описатель разделителя групп:

2147483647 ("##,#", en-US) -> 2,147,483,647

2147483647 ("##,#", es-ES) -> 2.147.483.647

Описатель масштабирования:

2147483647 ("#,#,,", en-US) -> 2,147

2147483647 ("#,#,,", es-ES) -> 2.147

"%"

Заместитель процентов

Умножает число на 100 и вставляет локализованный символ процента в результирующую строку.

Дополнительные сведения: Настраиваемый описатель "%".

0.3697 ("%#0.00", en-US) -> %36.97

0.3697 ("%#0.00", el-GR) -> %36,97

0.3697 ("##.0 %", en-US) -> 37.0 %

0.3697 ("##.0 %", el-GR) -> 37,0 %

"‰"

Местозаполнитель промилле

Умножает число на 1000 и вставляет локализованный символ промилле в результи��ующую строку.

Дополнительные сведения: Настраиваемый описатель "‰".

0.03697 ("#0.00‰", en-US) -> 36.97‰

0.03697 ("#0.00‰", ru-RU) -> 36,97‰

"E0"

"E+0"

"E-0"

"e0"

"e+0"

"e-0"

Экспоненциальная нотация

Если за этим описателем следует по меньшей мере один ноль (0), результат форматируется с использованием экспоненциальной нотации. Регистр ("E" или "e") определяет регистр символа экспоненты в результирующей строке. Минимальное число цифр экспоненты определяется количеством нулей, стоящих за символом "E" или "e". Знак "+" указывает на то, что перед экспонентой всегда должен ставиться символ знака. Знак "-" указывает на то, что символ знака должен ставиться только в случае, если экспонента имеет отрицательное значение.

Дополнительные сведения: Настраиваемые описатели "E" и "e".

987654 ("#0.0e0") -> 98.8e4

1503.92311 ("0.0##e+00") -> 1.504e+03

1.8901385E-16 ("0.0e+00") -> 1.9e-16

\

Escape-символ

Указывает на то, что следующий за ним символ должен рассматриваться как литерал, а не как описатель настраиваемого формата.

Дополнительные сведения: Escape-символ "\".

987654 ("\###00\#") -> #987654#

'строка'

"строка"

Разделитель строк-литералов

Указывает на то, что заключенные в разделители символы должны быть скопированы в результирующую строку без изменений.

68 ("# ' градусов'") -> 68 градусов

68 ("#' градусов'") -> 68 градусов

;

Разделитель секций

Определяет секции с раздельными строками формата для положительных чисел, отрицательных чисел и нуля.

Дополнительные сведения: Разделитель секций ";".

12.345 ("#0.0#;(#0.0#);-\0-") -> 12.35

0 ("#0.0#;(#0.0#);-\0-") -> -0-

-12.345 ("#0.0#;(#0.0#);-\0-") -> (12.35)

12.345 ("#0.0#;(#0.0#)") -> 12.35

0 ("#0.0#;(#0.0#)") -> 0.0

-12.345 ("#0.0#;(#0.0#)") -> (12.35)

Другой

Все остальные символы

Символ копируется в результирующую строку без изменений.

68 ("# °") -> 68 °


 

 Подробнее:

http://msdn.microsoft.com/ru-ru/library/0c899ak8.aspx

http://dotnetways.com/sharpbook/tostring/

 

Как получить и обработать UnhandledException

Иногда в вашем приложении может возникнуть необработанное исключение, которое приведет к краху приложения.
Для этого нужно подписаться на UnhandledException


Для WPF, Silverlight и подобных:

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName assemName = assem.GetName();
Exception e = (Exception)args.ExceptionObject;
//необходимые действия
}

Для ASP.NET в фале Global.asax:

protected void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName assemName = assem.GetName();
//необходимые действияServer.ClearError();
}

Стоит заметить, что Application_Error вызывается в случае любой ошибки, в том числе когда нет нужной страницы и т.п.

Отладочная информация в Windows Phone (Frame rate counter)

При разработке приложений для Windows Phone мы заметили, что при отладке с права появляться некие счетчики.
Например:

Frame Rate Counters with Labels

 

Обозначения:
Composition thread frames per second – количество кадров в секунду обновления экрана (FPS).
User interface thread frames per second – количество кадров в секунду с которой работает основной поток пользовательского интерфейса.
Texture memory usage – сколько памяти используют текстуры которые есть в вашем приложении.
Surface counter – Число поверхностей которые передаться в графический процессор для обротки.
Intermediate surface counter – количество промежуточных текстуры, созданные для композитинга.
Screen fill rate counter – представляет количество полных экранов которые перерисовал телефон за каждый кадр.
Программное включение или от��лючение счетчика:

Application.Current.Host.Settings.EnableFrameRateCounter = true;

или

Application.Current.Host.Settings.EnableFrameRateCounter = false;

Примерные значения счетчиков:
Счетчик                                                                Хорошее    Лучшее
Composition thread frames per second             30               60  
User interface thread frames per second           15            >15 
Screen fill rate counter                                          1.0         <=2.0

Больше информации: http://msdn.microsoft.com/en-us/library/windowsphone/develop/gg588380(v=vs.105).aspx