ILMerge

ILMerge это утилита для объединения нескольких .NET сборок в одну.

 

http://www.microsoft.com/en-us/download/details.aspx?id=17630

 

пример

ilmerge /target:winexe /out:MergedApplicationExecutable.exe ApplicationExecutable.exe TelerikCommon.dll Telerik.WinControls.UI.dll Telerik.WinControls.dll

 

пример для .net 4.0

ILMerge.exe /target:winexe /targetplatform:"v4, C:\Windows\Microsoft.NET\Framework\v4.0.30319"/out:MergedApplicationExecutable.exe AppliocationExecutable.exe Telerik.WinControls.dll Telerik.WinControls.UI.dll TelerikCommon.dll

Task (async await) и Parallel в C#

Как работать с Task

var t = Task.Factory.StartNew(() => DoAction());

 

Action<object> action = (object obj) =>
{
Console.WriteLine("Task={0}, obj={1}, Thread={2}", Task.CurrentId, obj.ToString(), Thread.CurrentThread.ManagedThreadId);
};
// Создать задачу, без ее немедленного запуска
Task t1 = new Task(action, "alpha");
// Cоздать задачу и сразу запустить ее
Task t2 = Task.Factory.StartNew(action, "beta");
// дождаться завершения t2
t2.Wait();
// Запустить задачу t1 
t1.Start();
Console.WriteLine("t1 has been launched. (Main Thread={0})", Thread.CurrentThread.ManagedThreadId);
// Ждем задачу до конца.
// Вы можете дополнительно обеспечить тайм-аута или отмены маркера
// Для смягчения ситуации, когда задача занимает слишком много времени, чтобы закончить.        
t1.Wait();
// Создать задачу но не запустить ее
Task t3 = new Task(action, "gamma");
// Запустите его синхронно
t3.RunSynchronously();
// Хотя задача была выполнена синхронно, это хорошая практика, чтобы ждать его, завершения.
t3.Wait();

 

// вернуть задачу 
public Task<int> DoSome()
{
return Task.Factory.StartNew(() =>
{
Thread.Sleep(500);
return 100500;
});
}

 


Параллелизм

Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());


Ссылки:

http://msdn.microsoft.com/ru-ru/library/system.threading.tasks.task.aspx

http://msdn.microsoft.com/ru-ru/library/dd537609.aspx

SignalR добавить header для Forms авторизации

Если у вас на сервере настроение Froms авторизация, а вы из клиента пытаетесь подключиться к сервису то обычно нужно добавить в заголовок запроса авторотационные Cookies.
Как это сделать
1. На сервере в Hub добавить авторизацию:

[Authorize]
[HubName("MyTestHub")]
public class TestHub : Hub
{
public TestHub()
{
int a = 5;
}
}

2. Каким-то образом получить заголовок авторизации
http://acroblog.acrovations.com/post/2013/03/22/Forms-авторизация-WCF-Data-Service.aspx
например как тут, в функции GetCookie

var hub = new HubConnection("http://localhost:5555/signalr");
hub.CookieContainer = new CookieContainer();
hub.CookieContainer.SetCookies(new Uri("http://localhost:5555/"), MyCookieHeader.Cookie);
var x = hub.CookieContainer.GetCookieHeader(new Uri("http://localhost:5555/"));
var cook = new Cookie("test", "test");
cook.Domain = "localhost";
cook.Path = "/";
hub.CookieContainer.Add(cook);
proxy = hub.CreateHubProxy("MyTestHub");
hub.Start().Wait();

все.
Главное добавить какой-то cookie чтобы было с чем заголовок отправлять.

MVVM Command Pattern

public ICommand CommandName { get; set; }
private void CommandExecutedLogic(object param)
{
// Do Some
}
private bool CanExecutedLogic(object param)
{
return param != null;
}


В конструкторе:

this.CommandName = new DelegateCommand(this.
CommandExecutedLogic, this. CanExecutedLogic);

WCF Data Services и Composite Key и Telerik Open Access ORM (OData V3)

Если вы используете связи многие-ко-многим (many-to-many) с помощю составных ключей:

CREATE TABLE ClientInGroup
(
ClientID bigint foreign key references Client(ID) not null, 
ClientGroupID bigint foreign key references ClientGroup(ID) not null, 
PRIMARY KEY  
(
ClientID,
ClientGroupID 
)
)

И решили использовать WCF Data Service то можете столкнуться с проблемой когда вы не можете обновить связанные записи.
Для решение этой досадной проблемы нужно сделать вот чего:

На сервер в сгенерированном телериком файле OpenAccessUpdateProvider найти функцию GetNavigationalMember и добавить туда строку navigationProperty.IsManaged = true;

private MetaNavigationMember GetNavigationalMember(string propertyName, string className)
{
MetaNavigationMember navigationProperty = this.GetMember(propertyName, className) as MetaNavigationMember;
navigationProperty.IsManaged = true;
if (navigationProperty.Association is MetaJoinTableAssociation && !navigationProperty.IsManaged)
{
string exceptionMessage = string.Format("Change made on property {0} of type {1} that has IsManaged set to False will not be persisted.",
navigationProperty.PropertyName, navigationProperty.DeclaringType.FullName);
throw new InvalidOperationException(exceptionMessage);
}
return navigationProperty;
}

После этого все будет работать. И в вашем приложении вы можете спокойно связывать данные

dataModel.AddLink(CurrentSportSection, "Venues", item);


или

dataModel.DeleteLink(CurrentSportSection, "Venues", item);

 

WPF Data Service V2 в место V3

В процессе генерации прокси класа для WCF Data Service Visual Studio бывает указывает версию V2 в место V3.
Чтоб это исправить нужно найти класс сервиса и немного поменять конструктор:

[System.CodeDom.Compiler.GeneratedCodeAttribute ("System.Data.Services.Design", "1.0.0")]
public MyDataBaseService (global :: System.Uri serviceRoot):
base (serviceRoot, System.Data.Services.Common.DataServiceProtocolVersion.V3)
{
this.ResolveName = new global :: System.Func <global::System.Type, string> (this.ResolveNameFromType);
this.ResolveType = new global :: System.Func <string, global::System.Type> (this.ResolveTypeFromName);
this.OnContextCreated ();
}

В базовый конструктор нужно добавить System.Data.Services.Common.DataServiceProtocolVersion.V3 – что укажет что мы используем протокол версии V3.

Хотя после последнего обновления, данные манипуляции ненужны.

Timer Windows 8 (WinRT)

private DispatcherTimer timer;
private void StartTimer()
{
if (timer == null)
{
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 0,33);
timer.Tick += timer_Tick;
}
timer.Stop();
timer.Start();
}
public void timer_Tick(object sender, object args)
{
//какой-то код
}

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);
}

 

 

Описание стандартных стилей Windows Phone

Brush Resources

This table lists and describes the various brushes that can be applied.

 

Name

Type

Description

PhoneAccentBrush

SolidColorBrush

Foreground color to single-out items of interest

PhoneForegroundBrush

SolidColorBrush

Default foreground and border color

PhoneBackgroundBrush

SolidColorBrush

Default background for pages and other controls

PhoneContrastBackgroundBrush

SolidColorBrush

Background for contrasting elements

PhoneContrastForegroundBrush

SolidColorBrush

Foreground for contrasting elements

PhoneDisabledBrush

SolidColorBrush

Disabled foreground and color

PhoneSubtleBrush

SolidColorBrush

Subtle foreground and border

TransparentBrush

SolidColorBrush

100% transparent brush used for background and touch targets

PhoneSemitransparentBrush

SolidColorBrush

Partially transparent background brush used to provide contrast against image backgrounds

PhoneChromeBrush

SolidColorBrush

Used to match the application bar color

 

TextBox Brushes

 

Name

Type

Description

PhoneTextBoxBrush

SolidColorBrush

Brush for the TextBox control

PhoneTextCaretBrush

SolidColorBrush

Brush for the caret in the TextBox

PhoneTextBoxForegroundBrush

SolidColorBrush

Brush for the TextBox control foreground

PhoneTextBoxEditBackgroundBrush

SolidColorBrush

Brush for the TextBox control edit background

PhoneTextBoxEditBorderBrush

SolidColorBrush

Brush for the TextBox control edit border

PhoneTextBoxReadOnlyBrush

SolidColorBrush

Brush for the TextBox control read-only state.

PhoneTextBoxSelectionForegroundBrush

SolidColorBrush

Brush for the TextBox control selection foreground

 

RadioButton and CheckBox Brushes

 

Name

Type

Description

PhoneRadioCheckBoxBrush

SolidColorBrush

Brush for the RadioButton and CheckBox

PhoneRadioCheckBoxDisabledBrush

SolidColorBrush

Brush for disabled RadioButton and CheckBox state

PhoneRadioCheckBoxCheckBrush

SolidColorBrush

Brush for the CheckBox check

PhoneRadioCheckBoxCheckDisabledBrush

SolidColorBrush

Brush for the disabled CheckBox check

PhoneRadioCheckBoxPressedBrush

SolidColorBrush

Brush for the RadioButton and CheckBox pressed state

PhoneRadioCheckBoxPressedBorderBrush

SolidColorBrush

Brush for the RadioButton and CheckBox pressed state

Color Resources

 

Name

Type

Description

PhoneBackgroundColor

Color

Default background for pages and other controls

PhoneForegroundColor

Color

Default foreground and border color

PhoneDisabledColor

Color

Disabled foreground and color

PhoneSubtleColor

Color

Subtle foreground and border

PhoneAccentColor

Color

Foreground color to single-out items of interest

PhoneContrastBackgroundColor

Color

Background for contrasting elements

PhoneContrastForegroundColor

Color

Foreground for contrasting elements

PhoneChromeColor

Color

Color of the status bar and application bar

PhoneSemitransparentColor

Color

Partially transparent color used to provide contrast against image backgrounds

 

TextBox Colors

 

Name

Type

Description

PhoneTextBoxColor

Color

Color for the TextBox control

PhoneTextCaretColor

Color

Color for the caret in the TextBox

PhoneTextBoxForegroundColor

Color

Color for the TextBox control foreground

PhoneTextBoxEditBackgroundColor

Color

Color for the TextBox control edit background

PhoneTextBoxEditBorderColor

Color

Color for the TextBox control edit border

PhoneTextBoxReadOnlyColor

Color

Color for the TextBox control read-only state.

PhoneTextBoxSelectionForegroundColor

Color

Color for the TextBox control selection foreground

 

RadioButton and CheckBox Colors

 

Name

Type

Description

PhoneRadioCheckBoxColor

Color

Color for the RadioButton and CheckBox

PhoneRadioCheckBoxDisabledColor

Color

Color for disabled RadioButton and CheckBox state

PhoneRadioCheckBoxCheckColor

Color

Color for the CheckBox check

PhoneRadioCheckBoxCheckDisabledColor

Color

Color for the disabled CheckBox check

PhoneRadioCheckBoxPressedColor

Color

Color for the RadioButton and CheckBox pressed state

PhoneRadioCheckBoxPressedBorderColor

Color

Color for the RadioButton and CheckBox pressed state

Font Names

This table lists and describes the various font names that can be applied. Attribute = FontFamily

 

Name

Type

Value

PhoneFontFamilyNormal

Font Family

Segoe WP

PhoneFontFamilyLight

Font Family

Segoe WP Light

PhoneFontFamilySemiLight

Font Family

Segoe WP Semilight

PhoneFontFamilySemiBold

Font Family

Segoe WP Semibold

Thickness

This table lists and describes the thickness that can be applied to UI elements. Attribute = BorderThickness, Margin, Padding

 

Name

Type

Value

PhoneHorizontalMargin

BorderThickness, Margin, Padding

12, 0

PhoneVerticalMargin

BorderThickness, Margin, Padding

0, 12

PhoneMargin

BorderThickness, Margin, Padding

12

PhoneTouchTargetOverhang

BorderThickness, Margin, Padding

12

PhoneTouchTargetLargeOverhang

BorderThickness, Margin, Padding

12, 20

PhoneTextBoxInnerMargin

BorderThickness, Margin, Padding

1,2

PhonePasswordBoxInnerMargin

BorderThickness, Margin, Padding

3,2

PhoneBorderThickness

BorderThickness, Margin, Padding

3

PhoneStrokeThickness

BorderThickness, Margin, Padding

3

Font Sizes

This table lists and describes the various font sizes that can be applied. Attribute = FontSize

 

Name

Type

Description

PhoneFontSizeSmall

Double

18.667

PhoneFontSizeNormal

Double

20

PhoneFontSizeMedium

Double

22.667

PhoneFontSizeMediumLarge

Double

25.333

PhoneFontSizeLarge

Double

32

PhoneFontSizeExtraLarge

Double

42.667

PhoneFontSizeExtraExtraLarge

Double

72

PhoneFontSizeHuge

Double

186.667

Text Styles

 

Name

Applies to:

Type

Description

PhoneTextBlockBase

TextBlock

Style

FontFamily: PhoneFontFamilyNormal

FontSize: PhoneFontSizeNormal

Foreground: PhoneForegroundBrush

Margin: PhoneHorizontalMargin

PhoneTextNormalStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

PhoneTextSubtleStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

Foreground: PhoneSubtleBrush

PhoneTextTitle1Style

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily: PhoneFontFamilySemiLight

FontSize: PhoneFontSizeExtraExtraLarge

PhoneTextTitle2Style

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily:PhoneFontFamilySemiLight

FontSize: PhoneFontSizeLarge

PhoneTextTitle3Style

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily: PhoneFontFamilySemiLight

FontSize: PhoneFontSizeMedium

PhoneTextSmallStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontSize: PhoneFontSizeSmall

Foreground: PhoneSubtleBrush

PhoneTextLargeStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily: PhoneFontFamilySemiLight

FontSize: PhoneFontSizeLarge

PhoneTextExtraLargeStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily: PhoneFontFamilySemiLight

FontSize: PhoneFontSizeExtraLarge

PhoneTextGroupHeaderStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily: PhoneFontFamilySemiLight

FontSize: PhoneFontSizeLarge

Foreground: PhoneSubtleBrush

PhoneTextContrastStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily: PhoneFontFamilySemiBold

Foreground: PhoneContrastForegroundBrush

 

PhoneTextAccentStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily: PhoneFontFamilySemiBold

Foreground: PhoneAccentBrush

 

PhoneTextHugeStyle

TextBlock

Style

BasedOn: PhoneTextBlockBase

FontFamily: PhoneFontFamilyLight

FontSize: PhoneFontSizeHuge

 

Theme Visibility and Opacity

There are also resources available to adjust the visibility and opacity of the dark and light theme backgrounds:

Visibility

 

Name

Type

Description

PhoneDarkThemeVisibility

Visibility

Visible in dark theme and collapsed in the light theme

PhoneLightThemeVisibility

Visibility

Visible in light theme and collapsed in the dark theme

 

Opacity

 

Name

Type

Description

PhoneDarkThemeOpacity

Double

1 in the dark theme, 0 in the light theme

PhoneLightThemeOpacity

Double

0 in the dark theme, 1 in the light theme

 

MSDN http://msdn.microsoft.com/en-us/library/ff769552(VS.92).aspx

Как создать 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"));