HTML / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ WinRT- рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ
рдкрд░рд┐рдЪрдп рдХреЗ рдмрд╛рдж
ред рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ HTML рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ 8 рдХреЗ рд▓рд┐рдП рдЖрд░рдПрд╕рдПрд╕ рд░реАрдбрд░ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рд▓реЗрдХрд┐рди XAML / C # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдпрд╣ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдХрд░реЗрдВрдЧреЗ!
рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛
рдЪрд▓реЛ XAML / C # рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реБрдП, рдЧреНрд░рд┐рдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░реЗрдВ
рдлрд╝рд╛рдЗрд▓ рдореЗрдиреВ рд╕реЗ,
рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ
, рдлрд┐рд░
рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реА # , рдлрд┐рд░
рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ ,
рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдВрдбреЛ рдХреЗ рдордзреНрдп рднрд╛рдЧ рдореЗрдВ
, рдЧреНрд░рд┐рдб рдРрдк (рдПрдХреНрд╕рдПрдПрдордПрд▓) рдирд╛рдордХ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдирд╛рдо рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MyReader, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ
рд╕реНрдерд╛рди рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд╣ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд┐рд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░
рдареАрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдФрд░ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣
F5 , рд╣рд░реЗ рддреАрд░ рдХреЛ рджрдмрд╛рдХрд░ рдпрд╛
рдбреАрдмрдЧ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ->
рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ:
- рдХрд┐рд╕реА рднреА рдПрдХ рдЧреНрд░реЗ рдЯрд╛рдЗрд▓ рдпрд╛ рд╕рдореВрд╣ рд╣реЗрдбрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ;
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдмреИрдХ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдиреИрдк рдХрд┐рдП рдЧрдП рдореЛрдб рдореЗрдВ рдбрд╛рд▓реЗрдВред
рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ (
Shift + F5 , рдПрдХ рд▓рд╛рд▓ рд╡рд░реНрдЧ рдпрд╛
рдбрд┐рдмрдЧ рдЪреБрдиреЗрдВ -> рдореЗрдиреВ рд╕реЗ
рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ )ред
рд╣рдо рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдореБрдЦреНрдп рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ:
- * .xaml - XAML рднрд╛рд╖рд╛ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреГрд╖реНрда рдХрд╛ рдорд╛рд░реНрдХрдЕрдкред
- * .xaml.cs рдкреГрд╖реНрда рдХреА C # рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб-рдкреАрдЫреЗ рдХреА рдлрд╝рд╛рдЗрд▓ рд╣реИред
- App.xaml - XAML рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг, рдХреЛрдИ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреГрд╖реНрда рдирд╣реАрдВ рд╣реИред
- App.xaml.cs App.xaml рдХреЗ рд▓рд┐рдП C # рдХреЛрдб-рдкреАрдЫреЗ рдлрд╝рд╛рдЗрд▓ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд╕реНрддрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рд▓реЙрдиреНрдЪ, рд╕рдХреНрд░рд┐рдпрдг, рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд░рд┐рдпрдг рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, App.xaml.cs рдореЗрдВ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЗ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрд╢рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
- рд╕рд╛рдорд╛рдиреНрдп рдлрд╝реЛрд▓реНрдбрд░ , StandardStyles.xaml рдлрд╝рд╛рдЗрд▓ - рдЧреНрд░рд╛рдлрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╢реИрд▓реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓, App.xaml рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╢реИрд▓рд┐рдпрд╛рдБ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
- Package.appxmanifest рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рд╣реИ, рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрддреА рд╣реИрдВред рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдбрд┐рдЯрд░ рд╣реИ рдЬреЛ рд╕рдорд╛рдзрд╛рди рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо Package.appxmanifest рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЦреБрд▓рддрд╛ рд╣реИред
- AssemblyInfo.cs рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред
- MyReader_TemporaryKey.pfx - рдЙрд╕ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред
- рдПрд╕реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░, Logo.png, SmallLogo.png, StoreLogo.png рдлрд╛рдЗрд▓реЗрдВ - рдЖрд╡реЗрджрди рдХреА рдмрдбрд╝реА рдФрд░ рдЫреЛрдЯреА рдЯрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЗрдХрдиред
- SplashScreen.png - рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд┐рддреНрд░, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓реЗрдВ рднреА рд╣реЛрддреА рд╣реИрдВ, DataModel рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╛рдЗрд▓ рд╣реЛрддреА рд╣реИ -
SampleDataSource.cs ред
рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрджрд▓реЗрдВ
рддреЛ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред
рдЪрд▓реЛ рдирдореВрдирд╛рдбреИрдХреНрдЯрд░ рд╕реНрд░реЛрдд рд╡рд░реНрдЧ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд╣рдЯрд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
public SampleDataSource()
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕реИрдВрдкрд▓рдбрд╛рдЯрд╛ рд╕реНрд░реЛрдд рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдЖрд░рдПрд╕рдПрд╕рдбреИрдЯреНрд╕ рд╕реЛрд░реНрд╕, рд╕реИрдВрдкрд▓рдбрд╛рдЯрд╛рдЧреНрд░реБрдк рд╕реЗ рдЖрд░рдПрд╕рдПрд╕рдбреЗрдЯрд╛рдЧреНрд░реБрдк, рд╕реИрдВрдкрд▓рдбреИрдЗрдЯреАрдПрдо рд╕реЗ рдЖрд░рдПрд╕рдПрд╕рдбреЗрдЯрд╛рдЯрдо, рдФрд░ рд╕реИрдВрдкрд▓рдбрд╛рдХрдХреИрдореЛрди рд╕реЗ рдЖрд░рдПрд╕рдПрд╕рдбреЗрдЯрд╛ рдХреЛрдореЛрди рдХрд░реЗрдВрдЧреЗред

рджреБрдирд┐рдпрд╛ рдХреА рдПрдХ рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирдореВрдирд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ RSSDataSource.cs рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, RSSDataSource рд╡рд░реНрдЧ рдХреЗ рдЕрдЧрд▓реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмрджрд▓реЗрдВ
private static RSSDataSource _sampleDataSource = new RSSDataSource(); private ObservableCollection<RSSDataGroup> _allGroups = new ObservableCollection<RSSDataGroup>(); public ObservableCollection<RSSDataGroup> AllGroups { get { return this._allGroups; } }
рдХреЛрдб рдЕрд░реНрде рдореЗрдВ рд╕рдорд╛рди рд╣реИ, рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЖрдЧреЗ рд╡рд┐рдХрд╛рд╕ред
public static readonly ObservableCollection<RSSDataGroup> AllGroups = new ObservableCollection<RSSDataGroup>();
рдЕрдВрдд рдореЗрдВ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ _sampleDataSource рдХреЛ рд╡рд░реНрдЧ рдХреЛрдб рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ RSS рдпрд╛ ATOM рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд▓реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЖрдЧреЗ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред
public static async Task<bool> AddGroupForFeedAsync(string feedUrl) { string clearedContent = String.Empty; if (RSSDataSource.GetGroup(feedUrl) != null) return false; var feed = await new SyndicationClient().RetrieveFeedAsync(new Uri(feedUrl)); var feedGroup = new RSSDataGroup( uniqueId: feedUrl, title: feed.Title != null ? feed.Title.Text : null, subtitle: feed.Subtitle != null ? feed.Subtitle.Text : null, imagePath: feed.ImageUri != null ? feed.ImageUri.ToString() : null, description: null); foreach (var i in feed.Items) { string imagePath = null; if (i.Summary != null) clearedContent = Windows.Data.Html.HtmlUtilities.ConvertToText(i.Summary.Text); else if (i.Content != null) clearedContent = Windows.Data.Html.HtmlUtilities.ConvertToText(i.Content.Text); if (imagePath != null && feedGroup.Image == null) feedGroup.SetImage(imagePath); if (imagePath == null) imagePath = "ms-appx:///Assets/DarkGray.png"; feedGroup.Items.Add(new RSSDataItem( uniqueId: i.Id, title: i.Title.Text, subtitle: null, imagePath: imagePath, description: null, content: clearedContent, @group: feedGroup)); } AllGroups.Add(feedGroup); return true; }
рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред SyndicationClient рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо RSS / ATOM рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде, рд╣рдо HTML рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ, рдмрд╕ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ:
using Windows.Web.Syndication; using System.Threading.Tasks;
рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, GroupedItemsPage.xaml.cs рдлрд╝рд╛рдЗрд▓ рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ LoadState рд╡рд┐рдзрд┐ рдкрд░ рдЬрд╛рдПрдБ, рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирдореВрдирд╛ рдбреЗрдЯрд╛ рд╕рдореВрд╣ рдХреЛ RSSDataSource.llGroups рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЕрдм рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрд░рдВрднреАрдХрд░рдг рдирдореВрдирд╛DataGroups рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдЕрдм, рд▓реЛрдбрд╕реНрдЯреИрдЯ рдХреЛрдб рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ:
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) { this.DefaultViewModel["Groups"] = RSSDataSource.AllGroups; }
рдЕрдм, рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдЖрд░рдПрд╕рдПрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП AddGroupForFeedAsync рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ LoadState рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
RSSDataSource.AddGroupForFeedAsync("http://blogs.msdn.com/b/stasus/rss.aspx"); RSSDataSource.AddGroupForFeedAsync("http://www.spugachev.com/feed");
рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рд╣реБрд░реНрд░реЗ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ ... рдЦреИрд░, рдЪрд▓реЛ рдЗрд╕реЗ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдХрд░реЗрдВ!
рд╕реБрдВрджрд░ рдмрдирд╛рдУ
рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдкреЛрд╕реНрдЯреНрд╕ рдореЗрдВ рдФрд░ рдЯрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдореВрд╣рдмрджреНрдз рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЪрд┐рддреНрд░ рд╣реИрдВред
рдЪрд▓рд┐рдП RSSDataSource.cs рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЬрд╛рджреБрдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ RSS рдкреЛрд╕реНрдЯ рд╕реЗ рдЫрд╡рд┐рдпрд╛рдБ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ:
private static string GetImageFromPostContents(SyndicationItem item) { string text2search = ""; if (item.Content != null) text2search += item.Content.Text; if (item.Summary != null) text2search += item.Summary.Text; return Regex.Matches(text2search, @"(?<=<img\s+[^>]*?src=(?<q>['""]))(?<url>.+?)(?=\k<q>)", RegexOptions.IgnoreCase) .Cast<Match>() .Where(m => { Uri url; if (Uri.TryCreate(m.Groups[0].Value, UriKind.Absolute, out url)) { string ext = Path.GetExtension(url.AbsolutePath).ToLower(); if (ext == ".png" || ext == ".jpg" || ext == ".bmp") return true; } return false; }) .Select(m => m.Groups[0].Value) .FirstOrDefault(); }
рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдкреЛрд╕реНрдЯ рдХреЗ рдкрд╛рда рдпрд╛ рдЙрд╕рдХреЗ рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди png, jpg рдФрд░ bmp рдХреЗ рд╕рд╛рде) рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ:
using System.Text.RegularExpressions; using System.IO;
рдЕрдм AddGroupForFeedAsync рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЫреЛрдбрд╝реЗ рдЧрдП рд╕реНрдЯрдм рдкрд░ рдХреЙрд▓ рдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдкрд░рд┐рд╡рд░реНрддрди
string imagePath = null;
рдкрд░
string imagePath = GetImageFromPostContents(i);
рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХреА рдЯрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? рд╢рд╛рдпрдж рдЖрдкрдХреЛ рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ!
рдпрд╣ рдЙрди рд╕рднреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рдХрд╛рдо рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд┐рдП рдереЗред рд▓реЗрдХрд┐рди рд╣рдо рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдкрд░ рдирд╣реАрдВ рд░реБрдХрддреЗ рд╣реИрдВ!
рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЧреНрд░рд┐рдб рд╡реНрдпреВ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реАред рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдирдИ рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ: VariableSizeGridView.csред рдирдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреНрд▓реЙрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
using Windows.UI.Xaml.Controls;
, рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡рд░реНрдЧ GridView рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ: ReadyContainerForItemOverrideред рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Windows.UI.Xaml.Controls; namespace MyReader { class VariableSizeGridView: GridView { protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, item); } } }
рджрд░рдЕрд╕рд▓, ReadyContainerForItemOverride рд╡рд┐рдзрд┐ рдЙрд╕ рддрд░реНрдХ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧреА рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреА рдЯрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╕рдореВрд╣реАрдХреГрдд рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдЖрдкрдХреЛ GroupedItemsPage.xaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд╛рд░реНрдХрдЕрдк рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, GridView рдХреЛ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ - рд╕реНрдерд╛рдиреАрдп: VariableSizeGridView рд╕реЗ рдмрджрд▓реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, ItemPanelTemplate рдореЗрдВ, рд╣рдо VariableSizedWrapGrid рдЧреБрдгреЛрдВ рдХреЛ рдЖрдЗрдЯрдо рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рд╢рд░реНрддреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдХрд░ рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ:
<VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0" ItemWidth="200" ItemHeight="125" MaximumRowsOrColumns="9" />
рдкреГрд╖реНрда рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рдЕрдкрдирд╛ рдЖрдЗрдЯрдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛрдбрд╝реЗрдВ:
<DataTemplate x:Key="CustomItemTemplate"> <Grid HorizontalAlignment="Left"> <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> </Border> <StackPanel Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}" VerticalAlignment="Bottom"> <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Height="90" Margin="15,0,15,0" FontSize="30" /> </StackPanel> </Grid> </DataTemplate>
рдФрд░ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдореЗрдВ рдорд╛рдирдХ рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдЖрдЗрдЯрдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗ: VariableSizeGridView ::
<local:VariableSizeGridView x:Name="itemGridView" AutomationProperties.AutomationId="ItemGridView" AutomationProperties.Name="Grouped Items" Grid.RowSpan="2" Padding="116,137,40,46" ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}" ItemTemplate="{StaticResource CustomItemTemplate}" SelectionMode="None" IsSwipeEnabled="false" IsItemClickEnabled="True" ItemClick="ItemView_ItemClick">
рдРрдк рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред

рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рддрдм рддрдХ рд╣реИ рдЬрдм рддрдХ рд╣рдо рдЕрдкрдиреЗ рд▓реЙрдЬрд┐рдХ рдХреЛрдб рдХреЛ AddContainerForItemOverride рдореЗрдВ рдЬреЛрдбрд╝ рд▓реЗрддреЗ рд╣реИрдВред
рддреЛ, рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
class VariableSizeGridView: GridView { private int rowVal; private int colVal; protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item) { RSSDataItem dataItem = item as RSSDataItem; int index = -1; if (dataItem != null) { index = dataItem.Group.Items.IndexOf(dataItem); } if (index == 1) { colVal = 2; rowVal = 4; } else { colVal = 2; rowVal = 2; } if (index == 2) { colVal = 2; rowVal = 4; } if (index == 5) { colVal = 4; rowVal = 4; } VariableSizedWrapGrid.SetRowSpan(element as UIElement, rowVal); VariableSizedWrapGrid.SetColumnSpan(element as UIElement, colVal); base.PrepareContainerForItemOverride(element, item); }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдмрд╕ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдЯрд╛рдЗрд▓ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред
рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВред

рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рддреИрдпрд╛рд░рдХреЙрдиреНрдХреЗрдЯрд░рдлреЙрд░ рдЗрдЯрдЗрдореЙрдЗрд╡рд░рд╛рдЗрдб рдХреЗ рддрд░реНрдХ рд╕реЗ рд╣рдо рдЧреНрд░рд┐рдб рд╡реНрдпреВ рдХреЗ рднреАрддрд░ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдкрд░ рдореИрдВ рд╢рд╛рдпрдж рдкрд╣рд▓рд╛ рднрд╛рдЧ рдкреВрд░рд╛ рдХрд░реВрдВрдЧрд╛ред рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ: рд╣рдо рд▓рд╛рдЗрд╡ рдЯрд╛рдЗрд▓реНрд╕ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЕрдиреБрдмрдВрдз рдЦреЛрдЬреЗрдВ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЖрд░рдПрд╕рдПрд╕ рдлрд╝реАрдб рднреА рдЬрдорд╛ рдХрд░реЗрдВрдЧреЗред
UPD : рд╣рд╛рдБ, рдФрд░ рд╣рдо рд╢реАрд░реНрд╖рдХ рдХреЛ рднреА
рд╢реИрд▓реАрдмрджреНрдз рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдореВрд╣рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЯрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдорд╛рдирд╡реАрдп рд░реВрдк рд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛ, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рд╣реИред
SkyDrive рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдЖрд╡реЗрджрди (рдЫреЛрдЯрд╛ рд▓рд┐рдВрдХ):
aka.ms/w8RSSp1рдирдпрд╛ рд╕рд╛рд▓ рдореБрдмрд╛рд░рдХ рд╣реЛ!
рдпреБрдкреАрдбреА:рдЪрдХреНрд░ рдХрд╛ рднрд╛рдЧ реирдЪрдХреНрд░ рдХрд╛ рднрд╛рдЧ 3