рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдореМрд╕рдо 7. рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдкрд╛рд╕реА рдореИрдирд┐рдирди рдореЛрдмрд╛рдЗрд▓ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдиреЛрдХрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рдЪреИрдВрдкрд┐рдпрди рдФрд░ рдлреНрд▓реЗрдХреНрд╕, рдлреНрд▓реИрд╢ рдФрд░ рдлреНрд▓реИрд╢ рдореЛрдмрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдбреЛрдм рдХрдореНрдпреБрдирд┐рдЯреА рдкреНрд░реЛрдлреЗрд╢рдирд▓, рдПрдбреЛрдм рд╕рд░реНрдЯрд┐рдлрд╛рдЗрдб рдПрдХреНрд╕рдкрд░реНрдЯ рдФрд░ рдЯреНрд░реЗрдирд░ рд╣реИред рдПрдкреНрд▓рд╛рдЗрдб рдореИрдереЗрдореЗрдЯрд┐рдХреНрд╕ рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд╛рдЗрдВрд╕ рдореЗрдВ рдбрд┐рдЧреНрд░реА рдХреЗ рд╕рд╛рде Jyv├дskyl├д (рдлрд┐рдирд▓реИрдВрдб рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ) рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рд╕реЗ рд╕реНрдирд╛рддрдХ рдХреА рдЙрдкрд╛рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХреАред

рдпрд╣ рдЖрд▓реЗрдЦ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд┐рд╕реА рднреА рд╢рд╣рд░ рдореЗрдВ рдореМрд╕рдо рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕рдПрдордПрд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╡рд┐рдВрдбреЛ рдлреЛрди 7 рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬреЛ рд╡рд┐рд╢реНрд╡ рдореМрд╕рдо рдСрдирд▓рд╛рдЗрди рд╕реЗ рдореМрд╕рдо рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╡реЗрджрд░ рдСрдирд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдлреЛрди рдкрд░ рдЪрдпрдирд┐рдд рд╢рд╣рд░реЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╢рд╣рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореМрд╕рдо рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХрд╛ рдордиреЛрд░рдо рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред



WP7 рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдиреЛрд░рдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡реЗрджрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдореЗрдореЛрд░реА рд╕реЗ рд╡реЗрджрд░ рдСрдирд▓рд╛рдЗрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╣рд░реЛрдВ рдХреА рд╕рд╣реЗрдЬреА рдЧрдИ рд╕реВрдЪреА рдФрд░ рдПрдХ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╕рднреА рд╢рд╣рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореМрд╕рдо рдХрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдЕрдкрдиреЗ рдкреИрдиреЛрд░рдорд╛ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ рдкрд░ ApiKey рдФрд░ рдкрд╕рдВрджреАрджрд╛ рд╢рд╣рд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореМрд╕рдо рдСрдирд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА


рдореМрд╕рдо рдСрдирд▓рд╛рдЗрди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдЦ рд╕реЗ рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7.1 рдПрд╕рдбреАрдХреЗ


рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7 рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдЪрд┐рдд рдПрд╕рдбреАрдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдирд╡реАрдирддрдо рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдПрд╕рдбреАрдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред

рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдРрдк


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



рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ C # рдХреЛ рд╡рд┐рдХрд╛рд╕ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ред

рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7 рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрдХреНрд╕рдПрдордПрд▓


рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7. рдореЗрдВ XML рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ XML рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЛ рдПрдХреНрд╕рдПрдордПрд▓ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ System.Xml.Serialization рдФрд░ System.Xml.Linq рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ "рд╕рдВрджрд░реНрдн" рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рдирдпрд╛ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ ..." рдЪреБрдиреЗрдВред

рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЪрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ


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

рдЖрдкрдХреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рдХрд┐ PhonePerformance.dll рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдирд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╕ Visual Studio рдХреЛ рдмрдВрдж рдХрд░реЗрдВ, Windows Explorer рдЦреЛрд▓реЗрдВ, PhonePerformance.dll рдлрд╝рд╛рдЗрд▓ рдвреВрдВрдвреЗрдВ, рдЙрд╕ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдЧреБрдгреЛрдВ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЯрди рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░реЗрдВред

рдЖрд╡реЗрджрди рд╕реНрд░реЛрдд рдХреЛрдб


рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирдИ рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рдХрдХреНрд╖рд╛ рдЪреБрдиреЗрдВред

Forecast.cs

рдореМрд╕рдо рдСрдирд▓рд╛рдЗрди рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЦрдЬрд╛рдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╡рд░реНрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореМрд╕рдо рдСрдирд▓рд╛рдЗрди рд╕реЗ рдореМрд╕рдо рдХрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

namespace Weather { public class Forecast { public string query { get; set; } // cityname, countryname public string observation_time { get; set; } public string date { get; set; } public string temp_C { get; set; } public string tempMaxC { get; set; } public string tempMinC { get; set; } public string weatherIconUrl { get; set; } public string windspeedKmph { get; set; } public string humidity { get; set; } } } 


PanoramaItemObject.cs

рдореИрдВ рд╕рднреА рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреИрдиреЛрд░рдорд╛ рд╡реНрдпреВ рд╕реЗ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдкреИрдиреЛрд░рдорд╛ рд╡реНрдпреВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореМрд╕рдо рдФрд░ рдкрд╛рдВрдЪ рджрд┐рдиреЛрдВ рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд▓рдЧреНрди рдХреА рдЧрдИ рд╣реИред рдКрдкрд░ рдмрдирд╛рдИ рдЧрдИ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реВрдЪреА рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 using System.Collections.Generic; namespace Weather { public class PanoramaItemObject { public string observation_time { get; set; } public string date { get; set; } public string temperature { get; set; } public string huminity { get; set; } public string windspeed { get; set; } public string weatherIconUrl { get; set; } // five day's forecast public List<Forecast> forecasts { get; set; } } } 


рдкреИрдиреЛрд░рдорд╛ рджреГрд╢реНрдп


рдбрд┐рдЬрд╝рд╛рдЗрди (MainPage.xaml)

рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдИ рдкреИрдиреЛрд░рдорд╛ рджреГрд╢реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд╢рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред рд╢реАрд░реНрд╖рдХ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдкреИрдиреЛрд░рдорд╛ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ:

 <Grid x:Name="LayoutRoot" Background="Transparent"> <controls:Panorama Title="Weather Forecast" x:Name="Panorama"> <controls:Panorama.TitleTemplate> <DataTemplate> <TextBlock Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" Foreground="White" FontSize="100" Margin="0,60,0,0"/> </DataTemplate> </controls:Panorama.TitleTemplate> <controls:Panorama.Background> <ImageBrush ImageSource="Images/Background3.jpg"/> </controls:Panorama.Background> </controls:Panorama> </Grid> 


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

рдореИрдВ рдкреИрдиреЛрд░рдорд╛ рд╡реНрдпреВ рдореЗрдВ рдореМрд╕рдо рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдпреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ App.xaml рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред

рдбрд┐рдЬрд╛рдЗрди (App.xaml)

рд╕рднреА рдкреИрдиреЛрд░рдорд╛ рджреГрд╢реНрдп рд╕рдорд╛рди рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рд╣рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореМрд╕рдо рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдореИрдВрдиреЗ рдореМрд╕рдо рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DataTemplates рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред App.xaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ Application.Resources рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рдЕрдкрдиреЗ DataTemplates рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рдВрдЪ-рджрд┐рд╡рд╕реАрдп рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рджрд┐рдирд╛рдВрдХ, рдЫрд╡рд┐ рдФрд░ рдиреНрдпреВрдирддрдо / рдЕрдзрд┐рдХрддрдо рддрд╛рдкрдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред

рдЫрд╡рд┐

 <DataTemplate x:Key="ForecastsDataTemplate"> <StackPanel Height="40" Orientation="Horizontal" Margin="0,10,0,0"> <TextBlock Text="{Binding date}" FontSize="22" TextAlignment="Left" Width="150"/> <TextBlock Text=" " FontSize="20"/> <Image delay:LowProfileImageLoader.UriSource="{Binding weatherIconUrl}" Width="40" Height="40"/> <TextBlock Text=" " FontSize="20"/> <TextBlock Text="{Binding tempMaxC, StringFormat='\{0\} ┬░C'}" FontSize="22" TextAlignment="Right" Width="70"/> <TextBlock Text=" " FontSize="20"/> <TextBlock Text="{Binding tempMinC, StringFormat='\{0\} ┬░C'}" FontSize="22" TextAlignment="Right" Width="70"/> </StackPanel> </DataTemplate> 


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

рдЫрд╡рд┐

 <DataTemplate x:Key="ForecastTemplate"> <Grid x:Name="ContentPanel" Grid.Row="0" Margin="0,-10,0,0"> <Grid Height="150" VerticalAlignment="Top"> <Grid.ColumnDefinitions> <ColumnDefinition Width="150"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Image delay:LowProfileImageLoader.UriSource="{Binding weatherIconUrl}" Width="120" Height="120" Grid.Column="0" VerticalAlignment="Top"/> <StackPanel Grid.Column="1" Height="200" VerticalAlignment="Top"> <TextBlock Text="{Binding temperature}" FontSize="22"/> <TextBlock Text="{Binding observation_time}" FontSize="22"/> <TextBlock Text="{Binding huminity}" FontSize="22"/> <TextBlock Text="{Binding windspeed}" FontSize="22"/> </StackPanel> </Grid> <Grid Height="300" VerticalAlignment="Bottom"> <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="0,0,0,0"> <StackPanel Grid.Row="4" Height="40" Orientation="Horizontal" Margin="0,0,0,0"> <TextBlock Text="Date" FontSize="22" TextAlignment="Left" Width="170"/> <TextBlock Text="FC" FontSize="22" TextAlignment="Left" Width="60"/> <TextBlock Text="Max" FontSize="22" TextAlignment="Right" Width="60"/> <TextBlock Text="Min" FontSize="22" TextAlignment="Right" Width="90"/> </StackPanel> <ListBox ItemTemplate="{StaticResource ForecastsDataTemplate}" ItemsSource="{Binding forecasts}"/> </StackPanel> </Grid> </Grid> </DataTemplate> 


рддрд╕реНрд╡реАрд░реЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PhonePerformance.dll рдХреЗ рд▓рд┐рдП рдирд╛рдорд╕реНрдерд╛рди рдЬреЛрдбрд╝рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ:
 xmlns:delay="clr-namespace:Delay;assembly=PhonePerformance" 

рд╕рднреА рдбреЗрдЯрд╛ MainPage.xaml.cs рд╡рд░реНрдЧ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (MainPage.xaml.cs)

рд╕рдВрдкреВрд░реНрдг XML рд▓реЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ MainPage.xml.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрддреА рд╣реИред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рд╢рд╣рд░реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЙрд▓реЗрдХреНрд╢рди рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХреЛ рдПрдкрд╛рдЗрдХреА рд▓рд╛рдЗрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЛрдбрдлреЛрд░рдХрд╛рд╕реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХрдИ рдмрд╛рд░ рдЙрди рд╢рд╣рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЖрдЗрд╕реЛрд▓реЗрдЯреЗрдбрд╕реНрдЯреЛрд░реЗрдЬрд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред

рд╣рдо рдХрдХреНрд╖рд╛ рдЪрд░ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдВрдЧреЗ:

 private ObservableCollection<String> queries = new ObservableCollection<String>(); private int query; private string weatherURL = "http://free.worldweatheronline.com/feed/weather.ashx?q="; private string apiKey; private IsolatedStorageSettings appSettings; const string QueriesSettingsKey = "QueriesKey"; const string APISettingsKey = "APIKey"; 


MainPage рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:

 // Constructor public MainPage() { InitializeComponent(); // get settings for this application appSettings = IsolatedStorageSettings.ApplicationSettings; // is there network connection available if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) { MessageBox.Show("There is no network connection available!"); return; } } 


рд╣рд░ рдмрд╛рд░ рдЬрдм MainPage рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ OnNavigatedTo рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рд╣рдо рд╕рднреА рд╢рд╣рд░реЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ IsolatedStorage рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рднреА рдкреИрдиреЛрд░рдорд╛ рд╡реНрдпреВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рднреА рд╢рд╣рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { if (appSettings.Contains(QueriesSettingsKey)) { queries = (ObservableCollection<String>)appSettings[QueriesSettingsKey]; } if (appSettings.Contains(APISettingsKey)) { apiKey = (string)appSettings[APISettingsKey]; } else { apiKey = ""; } // delete old Panorama Items Panorama.Items.Clear(); // start loading weather forecast query = 0; if (queries.Count() > 0 && apiKey != "") LoadForecast(); } 


рд▓реЛрдбрдлрд╝реЛрд░рдХрд╛рд╕реНрдЯ рд╡реЗрдмрд▓рд╛рдЗрдирд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореМрд╕рдо рдСрдирд▓рд╛рдЗрди рд╕рд░реНрд╡рд░ рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕рд▓реА XML рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

 private void LoadForecast() { WebClient downloader = new WebClient(); Uri uri = new Uri(weatherURL + queries.ElementAt(query) + "&format=xml&num_of_days=5&key=" + apiKey, UriKind.Absolute); downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(ForecastDownloaded); downloader.DownloadStringAsync(uri); } 


рдореМрд╕рдо рдСрдирд▓рд╛рдЗрди рд╕рд░реНрд╡рд░ рд╕реЗ рдирдП рдореМрд╕рдо рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рд╡рд░реНрддрдорд╛рди рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реАрдзреЗ XML рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо AddPanoramaItem рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдкреИрдиреЛрд░рдорд╛ рдЗрдЯреЗрдо рдмрдирд╛рддреЗ рд╣реИрдВред

 private void ForecastDownloaded(object sender, DownloadStringCompletedEventArgs e) { if (e.Result == null || e.Error != null) { MessageBox.Show("Cannot load Weather Forecast!"); } else { XDocument document = XDocument.Parse(e.Result); var data1 = from query in document.Descendants("current_condition") select new Forecast { observation_time = (string) query.Element("observation_time"), temp_C = (string)query.Element("temp_C"), weatherIconUrl = (string)query.Element("weatherIconUrl"), humidity = (string)query.Element("humidity"), windspeedKmph = (string)query.Element("windspeedKmph") }; Forecast forecast = data1.ToList<Forecast>()[0]; var data2 = from query in document.Descendants("weather") select new Forecast { date = (string)query.Element("date"), tempMaxC = (string)query.Element("tempMaxC"), tempMinC = (string)query.Element("tempMinC"), weatherIconUrl = (string)query.Element("weatherIconUrl"), }; List<Forecast> forecasts = data2.ToList<Forecast>(); for (int i = 0; i < forecasts.Count(); i++) { forecasts[i].date = DateTime.Parse(forecasts[i].date).ToString("dddd"); } AddPanoramaItem(forecast,forecasts); } } 


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

 private void AddPanoramaItem(Forecast forecast, List<Forecast> forecasts) { // create object to bind the data to UI PanoramaItemObject pio = new PanoramaItemObject(); pio.temperature = "Temperature: " + forecast.temp_C + " ┬░C"; pio.observation_time = "Observ. Time: " + forecast.observation_time; pio.windspeed = "Wind Speed: " + forecast.windspeedKmph + " Kmph"; pio.huminity = "Huminity: " + forecast.humidity + " %"; pio.weatherIconUrl = forecast.weatherIconUrl; pio.forecasts = forecasts; // create PanoramaItem PanoramaItem panoramaItem = new PanoramaItem(); panoramaItem.Header = queries[query]; // modify header to show only city (not the country) int index = queries[query].IndexOf(","); if (index != -1) panoramaItem.Header = queries[query].Substring(0, queries[query].IndexOf(",")); else panoramaItem.Header = queries[query]; // use ForecastTemplate in Panorama Item panoramaItem.ContentTemplate = (DataTemplate)Application.Current.Resources["ForecastTemplate"]; panoramaItem.Content = pio; // add Panorama Item to Panorama Panorama.Items.Add(panoramaItem); // query next city forecast query++; if (query < queries.Count()) LoadForecast(); } 


рд╕реЗрдЯрд┐рдВрдЧреНрд╕


рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреГрдердХ рдЖрдЗрд╕реЛрд▓реЗрдЯреЗрдбрд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рд╕реЗрдЯрд┐рдВрдЧ рдкреЗрдЬ рддрдм рдЦреБрд▓рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╛рд░ (рдПрдкреНрд▓реАрдХреЗрд╢рди рдмрд╛рд░) рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдЖрдЗрдХрди (рдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИред

рдЫрд╡рд┐

рдбрд┐рдЬрд╛рдЗрди (Main.xaml)

рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд╛рдЗрди рдореЗрдВ рдЖрдЗрдХрди рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреА рдЫрд╡рд┐ рдХреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рд╕рдорд╛рдзрд╛рди рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреИрдирд▓ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред рдЖрдЗрдХрди рдФрд░ рдкрд╛рда рдореЗрдВ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВред

 <phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> <shell:ApplicationBarIconButton IconUri="/Images/appbar.feature.settings.rest.png" Text="Settings" Click="Settings_Click"/> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem Text="Settings" Click="Settings_Click"/> </shell:ApplicationBar.MenuItems> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar> 


рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (Main.xaml.cs)

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдирдкреЗрдЬ рдкреЗрдЬ рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдЧрд╛ рддреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛ред

 private void Settings_Click(object sender, EventArgs e) { this.NavigationService.Navigate(new Uri("/SettingsPage.xaml", UriKind.Relative)); } 


рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ


рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда (рдкреЗрдЬ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдРрдб рдЪреБрдиреЗрдВ рдФрд░ рдлрд┐рд░ рдирдпрд╛ рдЖрдЗрдЯрдо рдЪреБрдиреЗрдВред рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдкреЗрдЬ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдирдП рдкреЗрдЬ рдХреЛ SettingsPage.xaml рдирд╛рдо рджреЗрдВред

рдбрд┐рдЬрд╝рд╛рдЗрди (SettingsPage.xaml)

рдпрд╣ рдкреГрд╖реНрда рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдореЛрдб рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрда рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╛рдо рдФрд░ рдкреГрд╖реНрда рдХрд╛ рдирд╛рдо рдЗрд╕рдХреЗ рдКрдкрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ API рдХреБрдВрдЬреА рдХреЛ рдЬреЛрдбрд╝ рдФрд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╢рд╣рд░реЛрдВ рдХреЛ рд╕рд┐рдЯреАрд▓рд┐рд╕реНрдЯ рд╕реВрдЪреА рдореЗрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рд╕реВрдЪреА рдореЗрдВ рд╢рд╣рд░ рдХреЗ рдирд╛рдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдП рд╢рд╣рд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛рдПрдЧреА)ред

 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel Orientation="Vertical"> <TextBlock Text="API Key"/> <TextBox x:Name="APIKey" Text=""/> <TextBlock Text="Add City"/> <TextBox x:Name="NewCityName" Text="Cityname, Countryname"/> <Button Content="Test and Add" Click="Test_Click"/> <TextBlock Text="Cities (click city to remove)"/> <ListBox x:Name="CitiesList" VerticalAlignment="Top" FontSize="30" ItemsSource="{Binding queries}" Height="280" Margin="30,10,0,0" SelectionChanged="CitiesList_SelectionChanged"/> </StackPanel> </Grid> 


рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (SettingsPage.xaml.cs)

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рд╢рд╣рд░ рдХреЗ рд▓рд┐рдП рдореМрд╕рдо рдХрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдореМрдЬреВрдж рд╣реИ (рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рддреЛ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдФрд░ рд╢рд╣рд░ рдХреЛ рд╡рд░реНрдЧ рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдкреГрд╖реНрдареЛрдВ рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИ рддреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд╣реЗрдЬ рд▓реА рдЬрд╛рддреА рд╣реИрдВред

рдХреНрд▓рд╛рд╕ рдХреЗ рд╡реИрд░рд┐рдПрдмрд▓ рд╡рд╣реА рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ Main.xaml.cs рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдереЗ; рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рдЗрд╕реА рддрд░рд╣ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред

рд╣рд░ рдмрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░, OnNavigatedTo рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рднреА рд╢рд╣рд░реЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ IsolatedStorage рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред

 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { if (appSettings.Contains(QueriesSettingsKey)) { queries = (ObservableCollection<String>)appSettings[QueriesSettingsKey]; } if (appSettings.Contains(APISettingsKey)) { apiKey = (string)appSettings[APISettingsKey]; APIKey.Text = apiKey; } // add cites to CitiesList CitiesList.ItemsSource = queries; } 


рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреГрд╖реНрда рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, OnNavigatedFrom рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЖрдЗрд╕реЛрд▓реЗрдЯреЗрдбрд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред

 protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { // add queries to isolated storage appSettings.Remove(QueriesSettingsKey); appSettings.Add(QueriesSettingsKey, queries); // add apikey to isolated storage appSettings.Remove(APISettingsKey); appSettings.Add(APISettingsKey, apiKey); } 


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

 private void ForecastDownloaded(object sender, DownloadStringCompletedEventArgs e) { if (e.Result == null || e.Error != null) { MessageBox.Show("Cannot load Weather Forecast!"); } else { XDocument document = XDocument.Parse(e.Result); XElement xmlRoot = document.Root; if (xmlRoot.Descendants("error").Count() > 0) { MessageBox.Show("There is no weather forecast available for " + query + " or your apikey is wrong!"); NewCityName.Text = query; } else { queries.Add(query); NewCityName.Text = "Cityname,Countryname"; } } } 


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪреА рдореЗрдВ рд╢рд╣рд░ рдХреЗ рдирд╛рдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╢рд╣рд░реЛрдВ рдХреЛ рд╕рд┐рдЯреАрд▓рд┐рд╕реНрдЯ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╢рд╣рд░ рдХреЛ рдХреЗрд╡рд▓ рд╕реВрдЪреА рд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХрд╛рдмрд┐рд▓реЗрдХреНрд╢рди рд╕реЗред

 private void CitiesList_SelectionChanged(object sender, SelectionChangedEventArgs e) { int selectedIndex = (sender as ListBox).SelectedIndex; if (selectedIndex == -1) return; MessageBoxResult m = MessageBox.Show("Do you want to delete " + queries[selectedIndex] + " from the list?","Delete City?", MessageBoxButton.OKCancel); if (m == MessageBoxResult.OK) { queries.RemoveAt(selectedIndex); } } 


рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВрдиреЗ рдиреЛрдХрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рд╡рд┐рдХреА рдореЗрдВ XML рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдЗрди рд▓реЗрдЦреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗ, рдФрд░ рд╡реЗ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7 рдкрд░ рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗред

рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: PTM_Weather.zip ред

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


All Articles