WinPhone: рдЙрддреНрдХреГрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛

рдЪреЗрддрд╛рд╡рдиреА!
рдПрдорд╡реАрд╡реАрдПрдо рдкреИрдЯрд░реНрди рдкрд░ рдЕрдзрд┐рдХ рд╣рд╛рд▓рд┐рдпрд╛ рдФрд░ рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рд▓реЗрдЦ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдпрд░реЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбрд▓ рдкреИрдЯрд░реНрди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд▓реЗрдЦреЛрдВ рдХреА рдЕрдЧрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЪрд┐рддреНрд░рдордп рдбреНрд░рд╛рдЗрдВрдЧ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рднреА рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдирдпрд╛ рдкрд╛ рд╕рдХреЗрдВрдЧреЗред рд╕рдВрдкрд╛рджрдХ рдХреА рдПрдХ рдЕрдиреВрдареА рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рдХрд╣рд╛рдиреА рд╣реЛрдЧреА рдЬреЛ рдлрд╝рд┐рд╕рд▓рдкрдЯреНрдЯреА рдХреЗ рд╕реНрд▓рд╛рдЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдЪрдореБрдЪ рд╕рд╣реА рд╕рдордп рдкрд░ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдФрд░ рд╣рд╛рдВ, рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рд╣рдо рдПрдХ рдЗрдВрджреНрд░рдзрдиреБрд╖ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ! рдЖрдЗрдП рдЬрд╛рдиреЗ ...

рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рдПрдХ рдЧреБрдгрд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред

рдЫрд╡рд┐


рдорд╛рд░реНрдХрдЕрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди

рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ WinPhone рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореИрдВ рдЗрд╕ рдордВрдЪ рдХреА рдХрдИ рд╕реАрдорд╛рдУрдВ рд╕реЗ рд▓рдЧрднрдЧ рдирд┐рд░рд╛рд╢ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рд░реНрдХрдЕрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рднреА рдирд╣реАрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ WPF рдпрд╛ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдореЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдпрд╛ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, xaml рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╣реИ:

<TextBlock Text={Localizing Hello}/> <Button Content={Picture New.png}/> 

"рддреЛ рдХреИрд╕реЗ!" рдпрд╣ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрд╛рдд рд╣реИ, "рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдФрд░ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рд╡реНрдпрд░реНрде рдирд╣реАрдВред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреНрд▓рд╛рд╕реЗрд╕ рдореЗрдВ рд░рд┐рд╕рд░реНрдкрд░ рд╕реЗ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдлрд╡рд╛рд╣ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЕрдЪрд╛рдирдХ рджреЗрдЦрд╛ рдХрд┐ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕реАрд▓рдмрдВрдж рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЙрд╕рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ, рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдЪрдордХрддреА рд╣реИ? рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛!

  public abstract class MarkupExtension : Binding, IValueConverter { protected MarkupExtension() { Source = Converter = this; } protected MarkupExtension(object source) // set Source to null for using DataContext { Source = source; Converter = this; } protected MarkupExtension(RelativeSource relativeSource) { RelativeSource = relativeSource; Converter = this; } public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture); public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

рдпрд╣рд╛рдВ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдЖрдЙрдЯ рд╣реИред рдФрд░ рдлрд┐рд░ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред

  public class Localizing : MarkupExtension { public static readonly LocalizingManager Manager = new LocalizingManager(); public Localizing() { Source = Manager; Path = new PropertyPath("Source"); } public string Key { get; set; } public override string ToString() { return Convert(Manager.Source, null, Key, Thread.CurrentThread.CurrentCulture) as string ?? string.Empty; } public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var key = Key; var resourceManager = value as ResourceManager; if (resourceManager == null || string.IsNullOrEmpty(key)) return ":" + key + ":"; var localizedValue = resourceManager.GetString(key); return localizedValue ?? ":" + key + ":"; } } public class LocalizingManager : INotifyPropertyChanged { private ResourceManager _source; public ResourceManager Source { get { return _source; } set { _source = value; PropertyChanged(this, new PropertyChangedEventArgs("Source")); } } public event PropertyChangedEventHandler PropertyChanged = (sender, args) => { }; } 

рдЕрдм рдЖрдк WinPhone рдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

  <TextBlock Text="{f:Localizing Key=ApplicationTitle}"/> 

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдкрд╕рд░реНрдЧ f рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛: рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдХреБрдВрдЬреА рдЧреБрдг рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ

 <TextBlock Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"/> 

рд╡реИрд╕реЗ, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рднрд╛рд╖рд╛ рдХреА рдЧрд░реНрдо рдЕрджрд▓рд╛-рдмрджрд▓реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдСрди-рдж-рдлреНрд▓рд╛рдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред MarkupExtension рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдХреЗ рдкреНрд░рддрд┐ рд╕рд╛рд╡рдзрд╛рдиреАред рдпрджрд┐ рдЖрдк MarkupExtension (RelativeSource рд░рд┐рд╢реНрддреЗрджрд╛рд░ рд╕реНрд░реЛрдд) рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛ред рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд░реНрдЧ рдХреЗ рд╕реНрдерд┐рд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рдЬрдм рджреГрд╢реНрдп рдмрдВрдж рд╣реЛ рдФрд░ рдЬрд░реВрд░рдд рди рд╣реЛ)ред рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рд▓рд┐рдВрдХ (WeakReferences) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╕рд╛рдЭрд╛ рдЖрджреЗрд╢

WinPhone рдореЗрдВ рдЯреАрдореЛрдВ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдг CanExecuteChanged рдЗрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рджрд╕реНрдпрддрд╛ рдЕрдирдкрдврд╝ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рд╣реА рдореЗрдореЛрд░реА рд▓реАрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЦреБрдж рдЗрд╕ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рджреЛрд╕реНрдд рдФрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдбреЗрд╡рд▓рдкрд░ рдпреВрд░реА рдХрд▓рд┐рдиреЛрд╡ рдиреЗ рдЗрд╕реЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрд╕реЗ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

WPF рдореЗрдВ рд╡реНрдпрд╛рдкрд╛рд░ рдЪрд╛рд╣реЗ рд╡рд╣рд╛рдБ RoutedCommands рдФрд░ CommandBindings рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рддрдВрддреНрд░ рд╣реИред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА рдХрд┐ рдЗрд╕рдХрд╛ рд╕реБрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк WinPhone рдкрд░ рдХреБрдЫ рд╕рдорд╛рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ? рд╢рд╛рдо рдХреЛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд, рдореИрдВрдиреЗ рдлрд┐рд░ рднреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдФрд░ рд╕рд╛рдЭрд╛ рдЖрджреЗрд╢реЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ред рд╡реЗ рджреГрд╢реНрдп рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реВрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рдардХ рдХреЛ рддреБрд░рдВрдд рднреЗрдЬреЗрдВ, рдЙрдирдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдореЙрдбрд▓ рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 this[SharedCommands.Back].CanExecute += (sender, args) => args.CanExecute = TouchIndex > 0; this[SharedCommands.Next].CanExecute += (sender, args) => args.CanExecute = TouchIndex < _toches.Count; this[SharedCommands.Back].Executed += (sender, args) => TouchIndex--; this[SharedCommands.Next].Executed += (sender, args) => TouchIndex++; 

рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ

 <Button Command="{f:Command Key=Back}" Content="{f:Picture Key=/Resources/IconSet/Next.png, Width=32, Height=32}"/> <Button Command="{f:Command Key=Next}" Content="{f:Picture Key=/Resources/IconSet/Next.png, Width=32, Height=32}"/> 


рд▓рдореНрдмреЛрджрд░ рднрд╛рд╡

рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡реНрдпреВ рдореЙрдбрд▓ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╣реИ

  public Tool Tool { get { return Get(() => Tool); } set { Set(() => Tool, value); } } 

рдпрд╣ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ

  this[() => Background].PropertyChanged += (sender, args) => { Canvas.Children.Clear(); Canvas.Background = Background; _toches.GetRange(0, TouchIndex).ForEach(Canvas.Children.Add); }; 

рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рджреВрд░ рдХрд░рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдХрд░рддрд╛ рд╣реВрдВ - рд╕рдм рдХреБрдЫ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдХрд┐рд╕реА рдиреЗ рд╣рдм рдкрд░ WinPhone рдХреЗ рд▓рд┐рдП Skype рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдбрд┐рд╕реНрд╕реИрдореНрдмрд▓реНрдб рд╕реЛрд░реНрд╕ рдХреЛрдб рдбрд╛рд▓ рджрд┐рдП рдереЗ, рдФрд░ рдлрд┐рд░ рдЗрди рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореЙрдбрд▓ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рдВрдХреЗрддрдХ рдирд╣реАрдВ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдЧреБрдгреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓реИрдВрдмрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реНрдХрд╛рдЗрдк рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдирдореЗрдВ рдХреБрдЫ рднрд░реЛрд╕рд╛ рд╣реИред рдФрд░ Skype рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рддрдм рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛;)

рдбреНрд░рд╛рдЗрдВрдЧ

рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдкрд░ рдЖрдП - рдбреНрд░рд╛рдЗрдВрдЧред рдордВрдЪ рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЗрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕рдмрд╕реЗ рддрд░реНрдХрд╕рдВрдЧрдд рддрд░реАрдХрд╛ рд╣реИ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЕрд░реНрдерд╛рддреН, рдХреИрдирд╡рд╕, рдкреЙрд▓реАрд▓рд╛рдЗрди рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЖрджрд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХреНрдпреЛрдВ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WritableBitmap рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдмрд╛рдЗрдХ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХ рдХреЛрд░ рдпрд╛ SIMD рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд▓реЛрдб рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрдВрдкреНрдпреВрдЯрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд╛рдлреА рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред

рддрдВрддреНрд░ рдХрд╛ рд╕рд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреИрдирд╡рд╛рд╕ ( Canvas ) рд╣реИ, рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рдкрд░ рдХреЛрдИ рднреА рд╕реНрдкрд░реНрд╢ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреНрд░рд╢ рдХреЗ рд╕рд╛рде рдмреНрд░рд╢ рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ Canvas.Children рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд┐рдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ Canvas.Children рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред Canvas.Children рд╕рдВрдЧреНрд░рд╣ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрди рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рдПрдХ рд╣рдЬрд╛рд░ рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛? рд╣рд╛рдВ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрднреА-рдХрднреА рдЫрд╡рд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА Canvas.Children рд╣реИ, Canvas.Children рд╕рд╛рдл рдХрд░реЗрдВред Canvas.Children рдФрд░ Canvas.Children рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдЗрд╕ рд╕рдордп рдЬреЛ рддрд╕реНрд╡реАрд░ рд╕рд╛рдордиреЗ рдЖрдИ рдереА, рдЙрд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ

  var raster = new WriteableBitmap(Canvas, null); Canvas.Background = new ImageBrush { AlignmentX = AlignmentX.Left, AlignmentY = AlignmentY.Top, Stretch = Stretch.None, ImageSource = raster, }; Canvas.Children.Clear(); 

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрди рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рдЖрджрд┐рдо рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо рдХрд╣рд╛рдиреА рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЗрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ? рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ - рдмрд╕ рдХреИрдирд╡рд╛рд╕ рдХреА рдореВрд▓ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдмрдЪрд╛рдПрдВ, рдЬреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рдерд╛, рдФрд░ List _toches . , _toches Canvas.Children , _toches .

: Polyline OpacityMask Canvas. , .

(). , .



, , . , , .

<LinearGradientBrush x:Key="RainbowBrush" StartPoint="0 0" EndPoint="0 0.6"> <LinearGradientBrush.Transform> <ScaleTransform ScaleY="2.8"/> </LinearGradientBrush.Transform> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFFF0000" Offset="0.0"/> <GradientStop Color="#FFFFFF00" Offset="0.1"/> <GradientStop Color="#FF00FF00" Offset="0.2"/> <GradientStop Color="#FF00FFFF" Offset="0.3"/> <GradientStop Color="#FF0000FF" Offset="0.4"/> <GradientStop Color="#FFFF00FF" Offset="0.5"/> <GradientStop Color="#FFFF0000" Offset="0.6"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush>

, тАУ , , . MVVM: . , , , .

!

PS . , , , , . .
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП List _toches . , _toches Canvas.Children , _toches .

: Polyline OpacityMask Canvas. , .

(). , .



, , . , , .

<LinearGradientBrush x:Key="RainbowBrush" StartPoint="0 0" EndPoint="0 0.6"> <LinearGradientBrush.Transform> <ScaleTransform ScaleY="2.8"/> </LinearGradientBrush.Transform> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFFF0000" Offset="0.0"/> <GradientStop Color="#FFFFFF00" Offset="0.1"/> <GradientStop Color="#FF00FF00" Offset="0.2"/> <GradientStop Color="#FF00FFFF" Offset="0.3"/> <GradientStop Color="#FF0000FF" Offset="0.4"/> <GradientStop Color="#FFFF00FF" Offset="0.5"/> <GradientStop Color="#FFFF0000" Offset="0.6"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush>

, тАУ , , . MVVM: . , , , .

!

PS . , , , , . .
рд╕рдВрдЧреНрд░рд╣ рд╢реБрд░реВ рдХрд░реЗрдВ List _toches . , _toches Canvas.Children , _toches .

: Polyline OpacityMask Canvas. , .

(). , .



, , . , , .

<LinearGradientBrush x:Key="RainbowBrush" StartPoint="0 0" EndPoint="0 0.6"> <LinearGradientBrush.Transform> <ScaleTransform ScaleY="2.8"/> </LinearGradientBrush.Transform> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFFF0000" Offset="0.0"/> <GradientStop Color="#FFFFFF00" Offset="0.1"/> <GradientStop Color="#FF00FF00" Offset="0.2"/> <GradientStop Color="#FF00FFFF" Offset="0.3"/> <GradientStop Color="#FF0000FF" Offset="0.4"/> <GradientStop Color="#FFFF00FF" Offset="0.5"/> <GradientStop Color="#FFFF0000" Offset="0.6"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush>

, тАУ , , . MVVM: . , , , .

!

PS . , , , , . .
List _toches . , _toches Canvas.Children , _toches .

: Polyline OpacityMask Canvas. , .

(). , .



, , . , , .

<LinearGradientBrush x:Key="RainbowBrush" StartPoint="0 0" EndPoint="0 0.6"> <LinearGradientBrush.Transform> <ScaleTransform ScaleY="2.8"/> </LinearGradientBrush.Transform> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFFF0000" Offset="0.0"/> <GradientStop Color="#FFFFFF00" Offset="0.1"/> <GradientStop Color="#FF00FF00" Offset="0.2"/> <GradientStop Color="#FF00FFFF" Offset="0.3"/> <GradientStop Color="#FF0000FF" Offset="0.4"/> <GradientStop Color="#FFFF00FF" Offset="0.5"/> <GradientStop Color="#FFFF0000" Offset="0.6"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush>

, тАУ , , . MVVM: . , , , .

!

PS . , , , , . .
 List _toches    .        ,              _toches  Canvas.Children ,        _toches . 

: Polyline OpacityMask Canvas. , .

(). , .



, , . , , .

<LinearGradientBrush x:Key="RainbowBrush" StartPoint="0 0" EndPoint="0 0.6"> <LinearGradientBrush.Transform> <ScaleTransform ScaleY="2.8"/> </LinearGradientBrush.Transform> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFFF0000" Offset="0.0"/> <GradientStop Color="#FFFFFF00" Offset="0.1"/> <GradientStop Color="#FF00FF00" Offset="0.2"/> <GradientStop Color="#FF00FFFF" Offset="0.3"/> <GradientStop Color="#FF0000FF" Offset="0.4"/> <GradientStop Color="#FFFF00FF" Offset="0.5"/> <GradientStop Color="#FFFF0000" Offset="0.6"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush>

, тАУ , , . MVVM: . , , , .

!

PS . , , , , . .
List _toches . , _toches Canvas.Children , _toches .

: Polyline OpacityMask Canvas. , .

(). , .



, , . , , .

<LinearGradientBrush x:Key="RainbowBrush" StartPoint="0 0" EndPoint="0 0.6"> <LinearGradientBrush.Transform> <ScaleTransform ScaleY="2.8"/> </LinearGradientBrush.Transform> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFFF0000" Offset="0.0"/> <GradientStop Color="#FFFFFF00" Offset="0.1"/> <GradientStop Color="#FF00FF00" Offset="0.2"/> <GradientStop Color="#FF00FFFF" Offset="0.3"/> <GradientStop Color="#FF0000FF" Offset="0.4"/> <GradientStop Color="#FFFF00FF" Offset="0.5"/> <GradientStop Color="#FFFF0000" Offset="0.6"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush>

, тАУ , , . MVVM: . , , , .

!

PS . , , , , . .

Source: https://habr.com/ru/post/In210778/


All Articles