GridView Parallax - Смещение фона при скроле GridView в WinRT

Для того чтобы добавить этот функционал нужно добраться до свойства ScrollViewer .HorizontalOffset.
Но у GridView нет доступа к ScrollViewer. Для того чтобы добраться до него нужно добавить в проект :  WinRT XAML Toolkit (http://winrtxamltoolkit.codeplex.com/)
Или взять есть из NuGet: winrtxamltoolkit
Теперь вы сможете получить доступ к ScrollViewer

Дальше на фон вы должны положить изображение (или что угодно):

<Image x:Name="BackImage1"  Source="/Assets/parallax/Parrallax_bg_1.jpg" 
Grid.RowSpan="2" 
Grid.Row="0" 
HorizontalAlignment="Center" 
VerticalAlignment="Bottom" 
Stretch="None">
</Image>

 

И добавить такой код (взял отсюда http://www.silverlightplayground.org/....GridView.aspx):

public MainPage()
{
this.InitializeComponent();
itemGridView.Loaded += itemGridView_Loaded; // наш GridView
}
void itemGridView_Loaded(object sender, RoutedEventArgs e)
{
var scrollViewer = this.itemGridView.GetFirstDescendantOfType<ScrollViewer>();
scrollViewer.ViewChanged += scrollViewer_ViewChanged;
}
void scrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
//функция расчета смещения
var scrollViewer = this.itemGridView.GetFirstDescendantOfType<ScrollViewer>();
var delta = (scrollViewer.HorizontalOffset / scrollViewer.ScrollableWidth) * 
(BackImage1.ActualWidth - scrollViewer.ViewportWidth);
BackImage1.Margin = new Thickness(-delta, 0, 0, 0);
}

 

 

Завершение процессов в C#

var myproc = System.Diagnostics.Process
GetProcessesByName("MyTestProgram").ToList();
if (myproc.Count > 1)
{
foreach (var item in myproc)
{
if (item.Id != System.Diagnostics.Process.GetCurrentProcess().Id)
{
item.Kill();
}
}
}

Lambda выражение в C# и делегаты

Лямбда выражение в C# это очень удобный и мощный инструмент.

Общий тип записи выглядит так (input parameters) => expression

Грубо говоря есть 2 способа работы с лямбдной.

1. Использование делегата Func

Func<string, string> someFuncName = s => s.ToUpper();
Console.WriteLine(someFuncName("teststring"));


По сути позволят использовать функцию.
Подробнее тут http://acroblog.acrovations.com/post/2012/11/01/C-Func.aspx

2. Использования для разных функций

button1.Click += (sender, e) =>
{
textBox1.Text += "someTestString";
};

Так же это можно делать асинхронно

button1.Click += async (sender, e) =>
{
await SomeMethodAsync();
textBox1.Text += "someTestString";
};
async Task SomeMethodAsync ()
{     
await Task.Delay(1000);
}

3. Делегаты

delegate void TestDelegate(string s);
…
TestDelegate myDel = n => { string s = n + " " + "World"; Console.WriteLine(s); };
myDel("Hello");

 4. LINQ

var someVar = linqObject.Where(w=>w.ID == 5);

 

Как создать 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 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
Главное без пробелов.

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

Описание форматов 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