{"id":216833,"date":"2014-03-24T11:09:03","date_gmt":"2014-03-24T07:09:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=216833"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=216833","title":{"rendered":"<span class=\"post_title\">\u041e\u0442\u043a\u0443\u0434\u0430 \u00ab\u043c\u044b\u043b\u043e\u00bb \u0432 WPF \u0438 \u043a\u0430\u043a \u0441 \u043d\u0438\u043c \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/d6a\/ef1\/44d\/d6aef144d1735196321321daa459bd8c.png\"\/><\/p>\n<p>  \u042d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f WPF-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0441\u0442\u0440\u0435\u043c\u044f\u0449\u0438\u0445\u0441\u044f \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0447\u0451\u0442\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 WPF \u0434\u043e \u043c\u043e\u0437\u0433\u0430 \u043a\u043e\u0441\u0442\u0435\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f, \u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0442\u0440. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u043a\u0442\u0443 \u0434\u043e\u043b\u0436\u043d\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043e\u0440\u0442\u0430\u043c\u0438 \u00ab\u043c\u044b\u043b\u0430\u00bb \u2014 \u043f\u0430\u0440\u0430\u0437\u0438\u0442\u043d\u044b\u043c\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0434\u0443\u0445\u0430, \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0438\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b, \u0430 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u043e\u0440\u044c\u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p>  <a href=\"#intro\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><br \/>  <a href=\"#part1\">1. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a><br \/>  <a href=\"#part2\">2. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f<\/a><br \/>  <a href=\"#part3\">3. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a><br \/>  <a href=\"#part4\">4. \u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a><br \/>  <a href=\"#part5\">5. \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438<\/a><br \/>  <a href=\"#part6\">6. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 SnapsToDevicePixels<\/a><br \/>  <a href=\"#part7\">7. \u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432<\/a><br \/>  <a href=\"#outro\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><br \/>  <a href=\"#links\">\u0421\u0441\u044b\u043b\u043a\u0438<\/a><\/p>\n<p>  <a name=\"intro\"><\/a><\/p>\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041a\u043e\u0432\u0430\u0440\u0441\u0442\u0432\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0431\u0440\u043e\u0441\u0430\u044e\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430. \u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u044e\u0442 \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 \u043e\u0434\u0438\u043d-\u0434\u0432\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044f. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044d\u0442\u0438 \u043c\u0435\u043b\u043e\u0447\u0438 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. <\/p>\n<p>  \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u0441\u0442 \u043d\u0430 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/187\/fea\/5a0\/187fea5a0d36750407ce3997d05d9757.png\"\/><\/div>\n<p>  <i>\u0414\u0430\u043b\u0435\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0430\u0445, \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0445\u043d\u044e\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043e\u0442 \u043d\u0438\u0436\u043d\u0435\u0439, \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0438\u0445 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 Windows \u0440\u0435\u0436\u0438\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u2014 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f. \u041e\u0431\u043b\u0430\u0434\u0430\u0442\u0435\u043b\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u044e\u0434\u0438 \u0441\u043e \u0441\u043b\u0430\u0431\u044b\u043c \u0437\u0440\u0435\u043d\u0438\u0435\u043c \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439. <\/i><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/db0\/483\/61d\/db048361d664803021194dcd5e960a79.png\"\/><\/div>\n<p>  \u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0451 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0432\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d\u0438 \u0432\u0430\u043c \u0437\u0430\u043f\u043e\u043c\u043d\u044f\u0442\u0441\u044f, \u0438 \u0432\u044b \u0432\u0435\u0440\u043d\u0451\u0442\u0435\u0441\u044c \u043a \u044d\u0442\u043e\u043c\u0443 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u0437\u0430 \u0447\u0451\u0442\u043a\u043e\u0441\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0441\u043d\u0430\u0431\u0436\u0435\u043d \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0435\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0451 <a href=\"http:\/\/kozinaka.com\/storage\/habrahabr\/PixelSnapping.zip\">\u0435\u0434\u0438\u043d\u044b\u043c \u0430\u0440\u0445\u0438\u0432\u043e\u043c (104 Kb)<\/a>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c \u0441\u043a\u043e\u043c\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 VS2010).<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043e\u0442\u043a\u0443\u0434\u0430 \u0436\u0435 \u00ab\u043c\u044b\u043b\u043e\u00bb WPF \u0438 \u043a\u0430\u043a \u0441 \u043d\u0438\u043c \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f?<\/p>\n<p>  <a name=\"part1\"><\/a><\/p>\n<h4>1. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/h4>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u0430\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u00ab\u0437\u0430\u043c\u044b\u043b\u0438\u0432\u0430\u043d\u0438\u044f\u00bb \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435. \u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 <i>Image<\/i> \u0440\u0430\u0437\u043c\u0435\u0440\u044b, \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0443\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u043d\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432, \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/107\/0f7\/5cc\/1070f75ccb3f9a930ef20b19937c49cd.png\"\/><\/div>\n<h5>\u041f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h5>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u043e \u043e\u0448\u0438\u0431\u043a\u0435, \u0442\u043e \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0442\u0443\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435, \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0432\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u0432\u043e\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 Windows \u0440\u0435\u0436\u0438\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 WPF-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u0430 \u0432\u0430\u0448\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u0435\u0437\u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u0440\u0447\u0435\u043d\u043e \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0438 \u043f\u043b\u0430\u043d\u044b \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0448\u0440\u0438\u0444\u0442\u0430\u043c\u0438, \u0442\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430 \u043b\u0435\u0442\u0443. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0438 \u0435\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">public static class Render {     static Render()     {         var flags = BindingFlags.NonPublic | BindingFlags.Static;         var dpiProperty = typeof(SystemParameters).GetProperty(&quot;Dpi&quot;, flags);          Dpi = (int)dpiProperty.GetValue(null, null);         PixelSize = 96.0 \/ Dpi;     }      \/\/\u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445     public static double PixelSize { get; private set; }      \/\/\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435     public static int Dpi { get; private set; } } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0432 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e <i>Image <\/i>\u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430. \u0412 XAML \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432.<\/p>\n<pre><code class=\"cs\">public class StaticImage : Image {     static StaticImage()     {         \/\/\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u043c\u0435\u043d\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438         Image.SourceProperty.OverrideMetadata(             typeof(StaticImage),              new FrameworkPropertyMetadata(SourceChanged));     }      private static void SourceChanged(  DependencyObject obj,                                          DependencyPropertyChangedEventArgs e)     {         var image = obj as StaticImage;         if (image == null) return;          \/\/\u041f\u043e\u043f\u0440\u0430\u0432\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435         image.Width = image.Source.Width * Render.PixelSize;         image.Height = image.Source.Height * Render.PixelSize;     } } <\/code><\/pre>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/6a6\/4cf\/f03\/6a64cff034ba520665108ffaeba440b4.png\"\/><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u0442\u043e \u0432\u0441\u0451, \u0447\u0442\u043e \u0432\u0430\u043c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f, \u044d\u0442\u043e \u043f\u043e\u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u0437\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f, \u0432\u044b\u0431\u0440\u0430\u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>RenderOptions.BitmapScalingMode<\/i>. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/783\/0c0\/28a\/7830c028af9d65445b7278d804c458d0.png\"\/><\/div>\n<p>  <a name=\"part2\"><\/a><\/p>\n<h4>2. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f<\/h4>\n<p>  \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u2014 \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <i>Image <\/i>\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 (\u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f <i>Rectangle <\/i>\u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 <i>Shape<\/i>). \u0412 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0448\u0438\u0440\u0438\u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043f\u043e\u043f\u043e\u043b\u0430\u043c \u043d\u0430\u0446\u0435\u043b\u043e. <\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0438 \u0431\u0435\u0437 \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 <i>Grid<\/i>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u043d\u0430 \u0447\u0430\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u044f\u0445. \u0412\u043e\u0442 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043b\u0435\u0432\u043e\u0439 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e, \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u2014 \u0442\u0443\u043c\u0430\u043d, \u0430 \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u2014 \u043d\u0435\u0447\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435:<\/p>\n<pre><code class=\"xml\">&lt;!-- \u0413\u0430\u0431\u0430\u0440\u0438\u0442\u044b \u043d\u0435 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043f\u043e\u043f\u043e\u043b\u0430\u043c \u043d\u0430\u0446\u0435\u043b\u043e --&gt; &lt;Grid Width=&quot;117&quot; Height=&quot;117&quot;&gt;             &lt;Grid.RowDefinitions&gt;         &lt;RowDefinition Height=&quot;*&quot;\/&gt;         &lt;RowDefinition Height=&quot;*&quot;\/&gt;     &lt;\/Grid.RowDefinitions&gt;     &lt;Grid.ColumnDefinitions&gt;         &lt;ColumnDefinition Width=&quot;*&quot;\/&gt;         &lt;ColumnDefinition Width=&quot;*&quot;\/&gt;     &lt;\/Grid.ColumnDefinitions&gt;      &lt;!-- \u0427\u0435\u0442\u044b\u0440\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 --&gt;     &lt;Grid.Resources&gt;         &lt;Style TargetType=&quot;Image&quot;&gt;             &lt;Setter Property=&quot;Width&quot; Value=&quot;48&quot;\/&gt;             &lt;Setter Property=&quot;Height&quot; Value=&quot;48&quot;\/&gt;             &lt;Setter Property=&quot;Margin&quot; Value=&quot;5&quot;\/&gt;             &lt;Setter Property=&quot;VerticalAlignment&quot; Value=&quot;Top&quot;\/&gt;             &lt;Setter Property=&quot;HorizontalAlignment&quot; Value=&quot;Left&quot;\/&gt;             &lt;Setter Property=&quot;Source&quot; Value=&quot;CookingPot.png&quot;\/&gt;         &lt;\/Style&gt;     &lt;\/Grid.Resources&gt;      &lt;Image Grid.Column=&quot;0&quot; Grid.Row=&quot;0&quot;\/&gt;     &lt;Image Grid.Column=&quot;1&quot; Grid.Row=&quot;0&quot;\/&gt;     &lt;Image Grid.Column=&quot;0&quot; Grid.Row=&quot;1&quot;\/&gt;     &lt;Image Grid.Column=&quot;1&quot; Grid.Row=&quot;1&quot;\/&gt; &lt;\/Grid&gt; <\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/83c\/780\/47b\/83c78047b663dd767e20900d1c96da4f.png\"\/><\/div>\n<p>  \u041d\u0435 \u043c\u0435\u043d\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 <i>Canvas <\/i>\u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432 \u0438\u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0439, \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f. <\/p>\n<p>  \u0412\u043e \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u00ab\u043c\u044b\u043b\u043e\u00bb, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0413\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u044d\u043a\u0440\u0430\u043d\u0430, \u0438 \u0438\u0445 \u0440\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/0b8\/384\/e43\/0b8384e438236d6875d256a21286efea.png\"\/><\/div>\n<p>  <\/p>\n<h5>\u041f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h5>\n<p>  \u0421 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>UseLayoutRounding <\/i>\u0432 <i>True <\/i>\u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 (<i>Window <\/i>\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435) \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0446\u0435\u043b\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u044f\u0432\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439.<\/p>\n<p>  \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u00ab\u0446\u0435\u043b\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0434\u0435\u043b\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043d\u0430\u0446\u0435\u043b\u043e\u00bb \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 96 dpi, \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 <i>Math.Round<\/i> \u0432\u0430\u043c \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u0434\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">static public double SnapToPixels(double value) {     value += PixelSize \/ 2;      \/\/\u041d\u0430 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 DPI \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 WPF-\u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0434\u0440\u043e\u0431\u043d\u044b\u0439.     \/\/\u041f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 1000 \u043d\u0443\u0436\u043d\u043e \u0438\u0437-\u0437\u0430 \u043f\u043e\u0442\u0435\u0440\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438     \/\/\u043f\u0440\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432 double     \/\/2.4 \/ 0.4 = 5.9999999999999991     \/\/240.0 \/ 40.0 = 6.0      var div = (value * 1000) \/ (PixelSize * 1000);      return (int)div * PixelSize; } <\/code><\/pre>\n<p>  <a name=\"part3\"><\/a><\/p>\n<h4>3. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/h4>\n<p>  \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u044b, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442\u0435 \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443 <i>Image <\/i>\u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0431\u0435\u0437 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0422\u0430\u043a\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u0435\u0441\u0442\u044c, \u044d\u0442\u043e <i>Stretch=\u00abNone\u00bb<\/i>, \u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f \u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u044f\u0432\u043d\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0432\u044b\u0432\u043e\u0434\u0430, \u043a\u0430\u043a \u0432\u044b \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0435\u0441\u044c \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u0440\u0438\u0441\u043a\u0430. \u0423 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0451 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043e\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0438 WPF \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u043e\u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0432 \u043a\u0443\u0440\u0441\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u0442\u043e, \u043f\u0440\u0438 \u0443\u0434\u0430\u0447\u043d\u043e\u043c \u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432, \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432 \u0447\u0435\u0440\u043d\u0443\u044e \u043c\u0430\u0433\u0438\u044e: \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0443 \u0432\u0430\u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e, \u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0438\u043c \u0440\u0430\u0441\u043f\u0443\u0445\u0430\u0442\u044c \u0438\u043b\u0438 \u0441\u0436\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0442\u0435\u0445 \u0436\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. <\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u044d\u0442\u0438 \u0442\u0440\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 (\u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0440\u0430\u0437\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435): <\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/5f0\/915\/c3c\/5f0915c3c7d924efb53a2c52a47ff390.png\"\/>&nbsp;&nbsp;&nbsp;<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1cc\/cf5\/486\/1cccf548621675b5e640ec2ec962156f.png\"\/>&nbsp;&nbsp;&nbsp;<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7ab\/14c\/7ec\/7ab14c7ec5f3cc34406a536653045e0d.png\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0430, \u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0435\u0433\u043e \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u044b \u0443\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0438 \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0432 \u00ab\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u00bb \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0432\u044b \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435 \u043a\u043b\u0430cc <i>StaticImage <\/i>\u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0451\u043d \u043e\u0442 \u044d\u0442\u0438\u0445 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>Source.Width<\/i> \u0438 <i>Source.Height<\/i>. <\/p>\n<p>  \u041d\u0438\u043a\u0442\u043e \u0438\u0437 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u043e\u043a \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0430\u0445\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u041c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0445 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0438 \u043d\u0435 \u0434\u0430\u044e\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043e\u043d \u0432\u0430\u0436\u0435\u043d. <\/p>\n<pre><code class=\"xml\">&lt;!-- \u041f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0435 --&gt; &lt;Grid&gt;     &lt;Grid.ColumnDefinitions&gt;         &lt;ColumnDefinition Width=&quot;Auto&quot;\/&gt;         &lt;ColumnDefinition Width=&quot;Auto&quot;\/&gt;         &lt;ColumnDefinition Width=&quot;Auto&quot;\/&gt;     &lt;\/Grid.ColumnDefinitions&gt;                   &lt;Image Grid.Column=&quot;0&quot; Source=&quot;Man1.png&quot; Stretch=&quot;None&quot; Margin=&quot;5&quot;\/&gt;     &lt;Image Grid.Column=&quot;1&quot; Source=&quot;Man2.png&quot; Stretch=&quot;None&quot; Margin=&quot;5&quot;\/&gt;     &lt;Image Grid.Column=&quot;2&quot; Source=&quot;Man3.png&quot; Stretch=&quot;None&quot; Margin=&quot;5&quot;\/&gt; &lt;\/Grid&gt; <\/code><\/pre>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/b75\/d9b\/044\/b75d9b0447dd761a58e6722cbfcc20fd.png\"\/><\/div>\n<h5>\u041f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h5>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u043c\u0443 \u0432 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 96 dpi. \u0421 \u0441\u0430\u043c\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442, \u043f\u043e\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 Paint \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442, \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435. \u0412 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u043a\u0435 <a href=\"http:\/\/www.irfanview.com\">IrfanView<\/a> \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f (\u0445\u043e\u0442\u043a\u0435\u0439 I):<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/4c2\/d9b\/f1f\/4c2d9bf1f2b57f6ccff69dd4e50690d7.png\"\/><\/div>\n<p>  \u0412 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 <a href=\"http:\/\/paintnet.ru\">Paint.NET<\/a> \u0442\u043e\u0433\u043e \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u0439\u0434\u044f \u0432 \u043c\u0435\u043d\u044e \u00ab\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u00bb, \u0434\u0430\u043b\u0435\u0435 \u00ab\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u043b\u043e\u0442\u043d\u0430\u2026\u00bb (\u0445\u043e\u0442\u043a\u0435\u0439 Ctrl+Shit+R). <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/2f0\/668\/4f2\/2f06684f2421a1d0053a29d2de4854d8.png\"\/><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0432 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438), \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"cs\">\/\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Image.Source \u0441 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 96 dpi BitmapSource ConvertBitmapTo96DPI(string path) {     var uri = new Uri(path);     var bitmapImage = new BitmapImage(uri);      int width = bitmapImage.PixelWidth;     int height = bitmapImage.PixelHeight;      int stride = width * 4; \/\/ 4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c     var pixelData = new byte[stride * height];     bitmapImage.CopyPixels(pixelData, stride, 0);      return BitmapSource.Create( width, height, 96, 96,                                  PixelFormats.Bgra32,                                 bitmapImage.Palette,                                  pixelData, stride); } <\/code><\/pre>\n<p>  <a name=\"part4\"><\/a><\/p>\n<h4>4. \u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/h4>\n<p>  \u0418\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0451\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u00ab\u043c\u044b\u043b\u0430\u00bb \u0443 \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e c \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 WPF \u043e\u0434\u043d\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 SVG \u0432 XAML \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u0430\u043d\u0430\u0446\u0435\u0435\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445. \u0423\u0432\u044b, \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0420\u043e\u0432\u043d\u043e \u0432 \u043f\u043e\u043b\u043d\u043e\u0447\u044c \u043a\u0430\u0440\u0435\u0442\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u044b\u043a\u0432\u0443, \u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. <\/p>\n<p>  \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432. \u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 48 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 (\u044d\u0442\u043e \u0447\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 80% \u0432\u0441\u0435\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445) \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u044b\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e: \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0436\u0435 \u043f\u043e\u0441\u0442\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443. \u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0443\u044e \u0438\u043a\u043e\u043d\u043a\u0443 \u043d\u0435 \u0432 \u0442\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0435, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0451 \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438, \u0438 \u043d\u0435\u0443\u043c\u043e\u043b\u0438\u043c\u044b\u0439 \u0430\u043d\u0442\u0438\u0430\u043b\u0438\u0430\u0441\u0438\u043d\u0433 \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u0435\u0431\u044f \u0436\u0434\u0430\u0442\u044c. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/68c\/377\/c75\/68c377c755d8495079a04dbe75a843e4.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/596\/bfa\/7ac\/596bfa7accadf26a0f8abbfd6f57143d.png\"\/><\/div>\n<p>  <\/p>\n<h5>\u041f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h5>\n<p>  \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 32\u044532 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u0430 \u0434\u043b\u044f \u0438\u043a\u043e\u043d\u043e\u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e 25\u044525. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u043e, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0438\u043a\u043e\u043d\u043a\u0430, \u0442\u043e \u0435\u0451 \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0442\u0440\u0430. <\/p>\n<p>  <a name=\"part5\"><\/a><\/p>\n<h4>5. \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438<\/h4>\n<p>  \u041f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 WPF \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u043a\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0447\u0451\u0442\u043a\u043e\u0441\u0442\u0438. \u041f\u043e\u043a\u0430 \u0442\u0435\u043a\u0441\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u043d, \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0447\u0451\u0442\u043a\u043e \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (.NET Framework 4.0 \u0438 \u0432\u044b\u0448\u0435). \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u0436\u0435 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, \u043f\u0440\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430\u0445 \u0441\u0434\u0432\u0438\u0433\u0430 \u00ab\u0448\u0430\u0440\u043f\u0438\u043b\u043a\u0430\u00bb \u0440\u0435\u0437\u043a\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043b\u0430\u0432\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e. <\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0430\u0440\u0430\u0437\u0438\u0442\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0435 \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438:<\/p>\n<pre><code class=\"xml\">&lt;Button VerticalAlignment=&quot;Top&quot;&gt;     &lt;Button.Template&gt;         &lt;ControlTemplate TargetType=&quot;Button&quot;&gt;             &lt;Border Width=&quot;255&quot; Height=&quot;40&quot;                     BorderThickness=&quot;1 0 1 1&quot; CornerRadius=&quot;0 0 10 10&quot;                      BorderBrush=&quot;#FF202020&quot; Background=&quot;#FFF7941D&quot;&gt;                 &lt;StackPanel Name=&quot;Panel&quot; Orientation=&quot;Horizontal&quot;&gt;                     &lt;Label    Content=&quot;\u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438&quot;                              Foreground=&quot;#FF202020&quot; VerticalAlignment=&quot;Center&quot;                              Margin=&quot;20 0 0 0&quot; Padding=&quot;0&quot;\/&gt;                 &lt;\/StackPanel&gt;             &lt;\/Border&gt;             &lt;ControlTemplate.Triggers&gt;                 &lt;Trigger Property=&quot;IsPressed&quot; Value=&quot;True&quot;&gt;                     &lt;Setter TargetName=&quot;Panel&quot; Property=&quot;Margin&quot; Value=&quot;3 1 -3 -1&quot;\/&gt;                 &lt;\/Trigger&gt;             &lt;\/ControlTemplate.Triggers&gt;         &lt;\/ControlTemplate&gt;     &lt;\/Button.Template&gt; &lt;\/Button&gt; <\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/132\/ab1\/755\/132ab175543292d9fcd0830e67272312.gif\"\/><\/div>\n<p>  \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0430\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b. \u0421\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0438\u0437 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0431\u043e\u0440\u0434\u044e\u0440\u0430, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 <i>StackPanel <\/i>(\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432 \u043a\u043d\u043e\u043f\u043a\u0435 \u0431\u044b\u043b\u0430 \u0435\u0449\u0451 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430) \u0438 \u0440\u0435\u0437\u043a\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043d\u0438\u0437 \u043d\u0430 \u043e\u0434\u0438\u043d-\u0434\u0432\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044f. <\/p>\n<h5>\u041f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h5>\n<p>  \u0412 .NET Framework 4.0 \u0438 \u0432\u044b\u0448\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <i>TextOptions <\/i>\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430: <i>Ideal <\/i>\u0438 <i>Display<\/i>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0435\u0436\u0438\u043c\u0443 <i>Ideal <\/i>\u2014 \u043a\u0430\u043a \u0431\u0443\u043a\u0432\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u043b\u043e\u0436\u0438\u0442\u0441\u044f, \u0442\u0430\u043a \u0438 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f. \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 <i>Display <\/i>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0447\u0435\u0442\u043a\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c, \u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0431\u0443\u043a\u0432\u044b \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0440\u043e \u0440\u0435\u0436\u0438\u043c\u044b \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"http:\/\/10rem.net\/blog\/2010\/06\/06\/wpf-and-silverlight-choose-your-fonts-and-text-rendering-options-wisely\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"http:\/\/blogs.msdn.com\/b\/text\/archive\/2009\/08\/24\/wpf-4-0-text-stack-improvements.aspx\">\u0437\u0434\u0435\u0441\u044c<\/a>. <\/p>\n<p>  \u042d\u0444\u0444\u0435\u043a\u0442 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u043e\u0442 \u0440\u0435\u0437\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u043b\u0435\u0433\u043a\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0432 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 \u0432 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f. \u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u0440\u0451\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0430. \u0414\u0432\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u0431\u043b\u043e\u043a\u0430 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0430 \u0440\u0430\u0437\u043c\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u0441\u0434\u0432\u0438\u0433\u0430, \u0430 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/385\/f6e\/402\/385f6e402ddbf33ec790a992af8395ea.gif\"\/><\/div>\n<p>  \u0421\u0430\u043c \u0444\u0430\u043a\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u00ab\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044e\u00bb. \u0415\u0441\u043b\u0438 \u0436\u0435 \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442, \u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u0441\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0423\u0432\u044b, \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0435\u0433\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0431\u043b\u043e\u043a\u0430 \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438\u043b\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0441\u0434\u0432\u0438\u0433\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c.<\/p>\n<p>  <a name=\"part6\"><\/a><\/p>\n<h4>6. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 SnapsToDevicePixels<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0442\u0430\u043a\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0430\u043a <i>Rectangle<\/i>, <i>Ellipse<\/i>, <i>Line<\/i>, <i>Path<\/i>, <i>Border <\/i>\u0438 \u0434\u0440., \u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445, \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u043e\u043d\u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u0430\u043c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"xml\">&lt;!-- \u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u043e\u0441\u044f\u043c \u0433\u0440\u0438\u0434 --&gt; &lt;Grid HorizontalAlignment=&quot;Center&quot; VerticalAlignment=&quot;Center&quot;&gt;     &lt;Grid.RowDefinitions&gt;         &lt;RowDefinition Height=&quot;10&quot;\/&gt;         &lt;RowDefinition Height=&quot;20&quot;\/&gt;     &lt;\/Grid.RowDefinitions&gt;     &lt;Grid.ColumnDefinitions&gt;         &lt;ColumnDefinition Width=&quot;25&quot;\/&gt;         &lt;ColumnDefinition Width=&quot;6&quot;\/&gt;     &lt;\/Grid.ColumnDefinitions&gt;      &lt;!-- \u0410\u043d\u0442\u0435\u043d\u043d\u0430 (\u043d\u0435\u0442 \u043d\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0435\u0439, \u043d\u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0435\u0439) --&gt;     &lt;Ellipse Grid.Column=&quot;0&quot; Grid.Row=&quot;0&quot; Grid.RowSpan=&quot;2&quot;              Fill=&quot;Black&quot; Width=&quot;10&quot; Height=&quot;10&quot;              VerticalAlignment=&quot;Top&quot; Margin=&quot;15 5 0 0&quot;\/&gt;     &lt;Line  Grid.RowSpan=&quot;2&quot;            X1=&quot;10&quot; X2=&quot;20&quot; Y1=&quot;1&quot; Y2=&quot;11&quot; Stroke=&quot;Black&quot;\/&gt;     &lt;Line  Grid.ColumnSpan=&quot;2&quot; Grid.RowSpan=&quot;2&quot;            X1=&quot;30&quot; X2=&quot;20&quot; Y1=&quot;1&quot; Y2=&quot;11&quot; Stroke=&quot;Black&quot; \/&gt;      &lt;!-- \u042f\u0449\u0438\u043a \u0441 \u044d\u043a\u0440\u0430\u043d\u043e\u043c (\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 \u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043e\u0442\u0441\u0442\u0443\u043f) --&gt;     &lt;Border Grid.ColumnSpan=&quot;2&quot; Grid.Row=&quot;1&quot; Background=&quot;#FFF7941D&quot;\/&gt;     &lt;Rectangle Grid.Column=&quot;0&quot; Grid.Row=&quot;1&quot;                Fill=&quot;White&quot; RadiusX=&quot;3&quot; RadiusY=&quot;3&quot;                 Margin=&quot;2.5&quot;\/&gt;      &lt;!-- \u041a\u043d\u043e\u043f\u043a\u0438 (\u0442\u043e\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439 1, \u043b\u0438\u043d\u0438\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439) --&gt;     &lt;Line Grid.Column=&quot;1&quot; Grid.Row=&quot;1&quot; StrokeThickness=&quot;1&quot;             Stroke=&quot;Black&quot; X1=&quot;0&quot; X2=&quot;4&quot; Y1=&quot;3&quot; Y2=&quot;3&quot;\/&gt;     &lt;Line Grid.Column=&quot;1&quot; Grid.Row=&quot;1&quot; StrokeThickness=&quot;1&quot;             Stroke=&quot;Black&quot; X1=&quot;0&quot; X2=&quot;4&quot; Y1=&quot;5&quot; Y2=&quot;5&quot;\/&gt;     &lt;Line Grid.Column=&quot;1&quot; Grid.Row=&quot;1&quot; StrokeThickness=&quot;1&quot;             Stroke=&quot;Black&quot; X1=&quot;0&quot; X2=&quot;4&quot; Y1=&quot;7&quot; Y2=&quot;7&quot;\/&gt; &lt;\/Grid&gt; <\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/5c2\/fcf\/ec1\/5c2fcfec1d4437d534d820c4e83e884c.png\"\/><\/div>\n<p>  \u041d\u0430 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0445 \u043d\u0438\u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0448\u0430\u0433\u0430\u043c\u0438 \u043f\u043e 0,2 \u043f\u0438\u043a\u0441\u0435\u043b\u044f. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0434\u043e\u043b\u044c \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043e\u0441\u0435\u0439, \u043f\u043e\u0442\u043e\u043c \u043f\u043e \u0434\u0443\u0433\u0435 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0444\u0430\u0437\u044b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u043a\u0443. <br \/>  <img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/e5c\/de5\/811\/e5cde5811e39c187c791e8938d0a659d.gif\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/085\/001\/f65\/085001f657b3cee4f6f2d03fc35abaaf.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/085\/001\/f65\/085001f657b3cee4f6f2d03fc35abaaf.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/085\/001\/f65\/085001f657b3cee4f6f2d03fc35abaaf.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/085\/001\/f65\/085001f657b3cee4f6f2d03fc35abaaf.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/085\/001\/f65\/085001f657b3cee4f6f2d03fc35abaaf.gif\"\/><\/p>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0442\u043a\u0438\u043c\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430, \u0438\u043d\u043e\u0433\u0434\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0435\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041a\u043d\u043e\u043f\u043a\u0438 \u0447\u0435\u0442\u043a\u0438\u0435 \u043b\u0438\u0431\u043e \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438, \u043b\u0438\u0431\u043e \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, \u0430 \u0447\u0430\u0449\u0435 \u0440\u0430\u0437\u043c\u044b\u0442\u044b \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u043e\u0441\u044f\u043c. \u0410\u043d\u0442\u0435\u043d\u043d\u0430 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u0430 \u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443 \u043d\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0443\u0435\u0442. <br clear=\"all\"\/>  <br clear=\"all\"\/>  <\/p>\n<h5>\u041f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h5>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>SnapsToDevicePixels <\/i>\u0432 <i>True <\/i>(\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0443 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0433\u0440\u0438\u0434\u0430). \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0435\u0435:<br \/>  <img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1da\/511\/809\/1da51180985e74398f07bff3475e0eb5.gif\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7f9\/c85\/698\/7f9c85698cdab0a4960939d3d8921e20.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7f9\/c85\/698\/7f9c85698cdab0a4960939d3d8921e20.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7f9\/c85\/698\/7f9c85698cdab0a4960939d3d8921e20.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7f9\/c85\/698\/7f9c85698cdab0a4960939d3d8921e20.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7f9\/c85\/698\/7f9c85698cdab0a4960939d3d8921e20.gif\"\/><\/p>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0438 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445, \u043d\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c. \u042d\u043a\u0440\u0430\u043d \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u043c\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u043e\u0441\u044f\u043c, \u0430 \u0435\u0433\u043e \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u043c\u044b\u0442\u044b.<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <i>SnapsToDevicePixels <\/i>\u0432 <i>True <\/i>\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u044d\u043a\u0440\u0430\u043d\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0440\u0432\u0435\u043d\u0438\u0435\u043c \u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <i>Image<\/i>, <i>Label <\/i>\u0438 <i>TextBlock <\/i>\u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0443 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0438\u043d\u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u043e. <i>Line <\/i>\u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. <i>Rectangle<\/i>, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u0440\u044b\u0433\u0438\u0432\u0430\u0442\u044c \u0438\u0437 \u0448\u0442\u0430\u043d\u043e\u0432 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435:  <\/p>\n<ol>\n<li>\u043a\u043e \u0432\u0441\u0435\u043c Y-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u043b\u0438\u043d\u0438\u0439, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0445 \u043a\u043d\u043e\u043f\u043a\u0438, \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c 0.5, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043a\u0440\u0430\u044f \u0441\u043e\u0432\u043f\u0430\u043b\u0438 \u0441 \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u043e\u0439 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430;<\/li>\n<li>\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f \u0443 \u044d\u043a\u0440\u0430\u043d\u0430 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 2, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439.<\/li>\n<\/ol>\n<p><img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/a52\/3fa\/ba1\/a523faba160c112ab44bca70fb57c58b.gif\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/dcb\/ad6\/7a4\/dcbad67a40aa6a5e68b1e48505e980f3.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/dcb\/ad6\/7a4\/dcbad67a40aa6a5e68b1e48505e980f3.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/dcb\/ad6\/7a4\/dcbad67a40aa6a5e68b1e48505e980f3.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/dcb\/ad6\/7a4\/dcbad67a40aa6a5e68b1e48505e980f3.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/dcb\/ad6\/7a4\/dcbad67a40aa6a5e68b1e48505e980f3.gif\"\/><\/p>\n<p>  \u041a \u0441\u043b\u043e\u0432\u0443, \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0435\u0442\u043a\u0438\u0439 \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 96 dpi, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0436\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u0440\u043e\u0434 \u0438 \u0448\u0430\u0442\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0432 \u043b\u044e\u0431\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u00ab\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432\u00bb (\u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0445\u043e\u0434\u0443, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044f).<br clear=\"all\"\/>  <br clear=\"all\"\/>  <a name=\"part7\"><\/a><\/p>\n<h4>7. \u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u0432 \u0441\u0432\u043e\u0451\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 <i>OnRender <\/i>\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0435 \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <i>DrawingContext<\/i>, \u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0443 \u0432\u0430\u0441 \u0440\u043e\u0432\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432 <i>Shape <\/i>\u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c <i>SnapsToDevicePixels <\/i>\u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0445\u043e\u0442\u0438\u0442\u0435. \u041c\u043e\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">public class Washer : FrameworkElement {     public Washer()     {         _brush = new SolidColorBrush(Color.FromRgb(247, 148, 29));         _brush.Freeze();          _pen = new Pen(Brushes.Black, 1);         _pen.Freeze();     }      protected override void OnRender(DrawingContext dc)     {         \/\/\u041d\u043e\u0436\u043a\u0438         dc.DrawLine(_pen, new Point(1, 21), new Point(4, 21));         dc.DrawLine(_pen, new Point(12, 21), new Point(15, 21));          \/\/\u041a\u043e\u0440\u043f\u0443\u0441         var rect = new Rect(0, 0, 16, 21);         dc.DrawRectangle(_brush, null, rect);                  \/\/\u041a\u043d\u043e\u043f\u043a\u0438         dc.DrawLine(_pen, new Point(12, 1), new Point(12, 4));         dc.DrawLine(_pen, new Point(14, 1), new Point(14, 4));               \/\/\u041e\u043a\u043e\u0448\u043a\u043e         dc.DrawEllipse(Brushes.White, _pen, new Point(8, 11), 5, 5);          \/\/\u0417\u0430\u0449\u0435\u043b\u043a\u0430 \u043d\u0430 \u043e\u043a\u043e\u0448\u043a\u0435         rect = new Rect(10, 10, 4, 2);         dc.DrawRectangle(Brushes.White, _pen, rect);     }      private Pen _pen;     private Brush _brush; } <\/code><\/pre>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435, \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0442\u0430\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/588\/630\/780\/58863078006560ffe9a915639e9c7a22.png\"\/><\/div>\n<p>  <img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/724\/954\/d7a\/724954d7ac2cd7a2f61102d64c925389.gif\"\/>\u0428\u0438\u0440\u0438\u043d\u0430 \u043f\u0435\u0440\u0430 \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u043b\u0438\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0435\u0440\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u0448\u0438\u0440\u0438\u043d\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043d\u0430\u0446\u0435\u043b\u043e, \u0442\u043e \u043a\u0440\u0430\u044f \u043b\u0438\u043d\u0438\u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u043d\u0438\u0445 \u0442\u043e\u0447\u043d\u043e \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043a\u0430\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u0434\u0432\u0438\u043d\u044c, \u0430 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0447\u0451\u0442\u043a\u0438\u043c\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f. \u041d\u0430 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0448\u0430\u0433\u043e\u043c \u0432 0,2 \u043f\u0438\u043a\u0441\u0435\u043b\u044f.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/a5c\/a69\/d99\/a5ca69d99a6408ef8efa3276f0dd3ef9.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/a5c\/a69\/d99\/a5ca69d99a6408ef8efa3276f0dd3ef9.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/a5c\/a69\/d99\/a5ca69d99a6408ef8efa3276f0dd3ef9.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/a5c\/a69\/d99\/a5ca69d99a6408ef8efa3276f0dd3ef9.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/a5c\/a69\/d99\/a5ca69d99a6408ef8efa3276f0dd3ef9.gif\"\/><br clear=\"all\"\/>  <br clear=\"all\"\/>  <\/p>\n<h5>\u041f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h5>\n<p>  WPF \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u2014 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 (<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa348553%28v=vs.85%29.aspx\">guidelines<\/a>). \u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 (\u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <i>OnRender<\/i>) \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0442\u043e\u0447\u043d\u043e \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7ec\/b5d\/609\/7ecb5d609b8234d73ff03a3602619a5c.png\"\/><\/div>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a (\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434 <i>OnRender<\/i>):<\/p>\n<pre><code class=\"cs\">protected override void OnRender(DrawingContext dc) {     double halfPen = _pen.Thickness \/ 2;      \/\/\u041d\u043e\u0436\u043a\u0438     var snapX = new double[] { 1, 12 };     var snapY = new double[] { 21 + halfPen };     dc.PushGuidelineSet(new GuidelineSet(snapX, snapY));             dc.DrawLine(_pen, new Point(1, 21), new Point(4, 21));     dc.DrawLine(_pen, new Point(12, 21), new Point(15, 21));             dc.Pop();      \/\/\u041a\u043e\u0440\u043f\u0443\u0441     snapX = new double[] { 0, };     snapY = new double[] { 21 };     dc.PushGuidelineSet(new GuidelineSet(snapX, snapY));     var rect = new Rect(0, 0, 16, 21);     dc.DrawRectangle(_brush, null, rect);     dc.Pop();              \/\/\u041a\u043d\u043e\u043f\u043a\u0438     snapX = new double[] { 12 - halfPen };     snapY = new double[] { 1 };     dc.PushGuidelineSet(new GuidelineSet(snapX, snapY));     dc.DrawLine(_pen, new Point(12, 1), new Point(12, 4));     dc.DrawLine(_pen, new Point(14, 1), new Point(14, 4));     dc.Pop();           \/\/\u041e\u043a\u043e\u0448\u043a\u043e     snapX = new double[] { 3 - halfPen };     snapY = new double[] { 6 - halfPen };     dc.PushGuidelineSet(new GuidelineSet(snapX, snapY));     dc.DrawEllipse(Brushes.White, _pen, new Point(8, 11), 5, 5);     dc.Pop();      \/\/\u0417\u0430\u0449\u0435\u043b\u043a\u0430 \u043d\u0430 \u043e\u043a\u043e\u0448\u043a\u0435     snapX = new double[] { 10 - halfPen };     snapY = new double[] { 10 - halfPen };     dc.PushGuidelineSet(new GuidelineSet(snapX, snapY));     rect = new Rect(10, 10, 4, 2);     dc.DrawRectangle(Brushes.White, _pen, rect);     dc.Pop(); } <\/code><\/pre>\n<p>  <img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/7f2\/d69\/a62\/7f2d69a62c83480d7dfdc17e04e8b24f.gif\"\/>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0430. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 96 dpi, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0448\u0438\u0440\u0438\u043d\u0430 \u043f\u0435\u0440\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u044f. \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0442\u043a\u0438\u0445 \u0433\u0440\u0430\u043d\u0438\u0446 \u043b\u0438\u043d\u0438\u0439 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u0435\u0451 \u0441\u0442\u043e\u0440\u043e\u043d.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/5d5\/bc3\/cf8\/5d5bc3cf856c25052edcdcb805773ba1.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/5d5\/bc3\/cf8\/5d5bc3cf856c25052edcdcb805773ba1.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/5d5\/bc3\/cf8\/5d5bc3cf856c25052edcdcb805773ba1.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/5d5\/bc3\/cf8\/5d5bc3cf856c25052edcdcb805773ba1.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/5d5\/bc3\/cf8\/5d5bc3cf856c25052edcdcb805773ba1.gif\"\/><\/p>\n<p>  \u0412\u0430\u0436\u043d\u044b\u043c \u043d\u044e\u0430\u043d\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0441 <i>DrawingContext <\/i>\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0435\u043a \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0432\u0435\u0441\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u044b\u0432\u043e\u0434, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0444\u0438\u0433\u0443\u0440\u044b, \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043e\u0441\u044c. \u0415\u0441\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0438 \u0440\u0430\u0437\u043e\u043c \u0437\u0430\u0442\u043e\u043b\u043a\u0430\u0442\u044c \u0432 \u0441\u0442\u0435\u043a, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043b\u0430\u0447\u0435\u0432\u043d\u044b\u043c. \u0418\u0437-\u0437\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<p>  \u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0440\u0430\u0437\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u043d\u0443\u0442\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0438\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043a\u0438 \u043c\u043e\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u0430, \u0430 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0443 \u043d\u0435\u0451 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u043e\u0436\u043a\u0438. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044f \u043f\u043e\u0434 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043b\u044e\u0431\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0427\u0443\u0442\u044c \u043d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c, \u043b\u0438\u0448\u0435\u043d\u043d\u044b\u0439 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430.<\/p>\n<h5>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/h5>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u043f\u0440\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435. \u041b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0440\u0442\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043f\u0443\u0442\u0451\u043c \u0440\u0443\u0447\u043d\u043e\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f:<\/p>\n<ol>\n<li>\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0414\u043b\u044f 96 dpi \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <i>Math.Round<\/i>, \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0442\u044c \u043f\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f;<\/li>\n<li>\u0448\u0438\u0440\u0438\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u044c\u0435\u0432 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f;<\/li>\n<li>\u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043a\u043e\u0433\u0434\u0430 \u0448\u0438\u0440\u0438\u043d\u0430 \u043f\u0435\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0448\u0438\u0440\u0438\u043d\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u044f;<\/li>\n<li>\u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0443 \u043d\u0430 \u0441\u0434\u0432\u0438\u0433 \u0435\u0433\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c <i>OnRender <\/i>\u043f\u0440\u0438 \u043b\u044e\u0431\u044b\u0445 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445.<\/li>\n<\/ol>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u043f\u0443\u043d\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (\u0435\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445):<\/p>\n<pre><code class=\"cs\">\/\/\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044e \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 public static class Render {     static Render()     {         var flags = BindingFlags.NonPublic | BindingFlags.Static;        var dpiProperty = typeof(SystemParameters).GetProperty(&quot;Dpi&quot;, flags);         Dpi = (int)dpiProperty.GetValue(null, null);         PixelSize = 96.0 \/ Dpi;         HalfPixelSize = PixelSize \/ 2;     }      \/\/\u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445     public static double PixelSize { get; private set; }      \/\/\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435     public static int Dpi { get; private set; }      \/\/\u041e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u0434\u043e \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439     static public double SnapToPixels(double value)     {         value += HalfPixelSize;          \/\/\u041d\u0430 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 DPI \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 WPF-\u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0434\u0440\u043e\u0431\u043d\u044b\u0439.         \/\/\u041f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 1000 \u043d\u0443\u0436\u043d\u043e \u0438\u0437-\u0437\u0430 \u043f\u043e\u0442\u0435\u0440\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438         \/\/\u043f\u0440\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432 double         \/\/2.4 \/ 0.4 = 5.9999999999999991         \/\/2400.0 \/ 400.0 = 6.0          var div = (value * 1000) \/ (PixelSize * 1000);          return (int)div * PixelSize;     }      private static readonly double HalfPixelSize; } <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0448\u0438\u0440\u0438\u043d\u0443 \u043f\u0435\u0440\u0430 \u0438\u043b\u0438 \u044d\u043a\u0440\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443) \u043d\u0443\u0436\u043d\u043e \u0436\u0451\u0441\u0442\u043a\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0435\u0451 \u043a\u0430\u043a <i>Render.PixelSize * n<\/i>. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u0442\u044c \u0435\u0451 \u0434\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <i>Render.SnapToPixels<\/i>.<\/p>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0438 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0439 (\u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u0441\u0430\u0431\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0434\u0432\u0438\u0433\u0430\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0438 \u043d\u0435\u0447\u0451\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u043f\u0435\u0440\u044c\u0435\u0432) \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432:<\/p>\n<pre><code class=\"cs\">public class SelfDrawingControlBase : FrameworkElement {     public SelfDrawingControlBase()     {         Snap = 0.5 * Render.PixelSize;         SubpixelOffset = new Point(0, 0);         LayoutUpdated += OnLayoutUpdated;     }      protected void OnLayoutUpdated(object sender, EventArgs e)     {         FixSubpixelOffset();         InvalidateVisual();     }      \/\/\u041f\u043e\u0434\u0433\u043e\u043d\u043a\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043b\u0438\u043d\u0438\u0438 \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439     protected void SnapLine(Pen pen, ref Point begin, ref Point end)     {         var snapX = -SubpixelOffset.X;         var snapY = -SubpixelOffset.Y;          if (IsOdd(pen.Thickness))         {             if (begin.X == end.X)                 snapX += Snap;              if (begin.Y == end.Y)                 snapY += Snap;         }          begin.X += snapX;         begin.Y += snapY;          end.X += snapX;         end.Y += snapY;     }      \/\/\u041f\u043e\u0434\u0433\u043e\u043d\u043a\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439     protected void SnapRectangle(Pen pen, ref Rect rect)     {         var snapX = -SubpixelOffset.X;         var snapY = -SubpixelOffset.Y;          if (pen != null && IsOdd(pen.Thickness))         {             snapX += Snap;             snapY += Snap;         }          rect.Location = new Point(rect.Left + snapX, rect.Top + snapY);     }      \/\/\u041f\u043e\u0434\u0433\u043e\u043d\u043a\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u044d\u043b\u043b\u0438\u043f\u0441\u0430 \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439     protected void SnapEllipse(Pen pen, ref Point center)     {         var snapX = -SubpixelOffset.X;         var snapY = -SubpixelOffset.Y;          if (pen != null && IsOdd(pen.Thickness))         {             snapX += Snap;             snapY += Snap;         }          center.X += snapX;         center.Y += snapY;     }      \/\/\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043a\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435     protected double Snap { get; private set; }      \/\/\u041e\u0431\u0449\u0438\u0439 \u0441\u0434\u0432\u0438\u0433 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439     protected Point SubpixelOffset { get; private set; }      \/\/\u0412\u044b\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0441\u0434\u0432\u0438\u0433\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439     \/\/\u0434\u043b\u044f \u0443\u0447\u0451\u0442\u0430 \u0435\u0433\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c     private void FixSubpixelOffset()     {         var offset = TranslatePoint(new Point(0, 0),                                     Application.Current.MainWindow);          SubpixelOffset = new Point( ModByPixel(offset.X),                                     ModByPixel(offset.Y));     }      \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439     private static bool IsOdd(double value)     {         \/\/\u041d\u0430 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 DPI \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 WPF-\u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0434\u0440\u043e\u0431\u043d\u044b\u0439.         \/\/\u041f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 1000 \u043d\u0443\u0436\u043d\u043e \u0438\u0437-\u0437\u0430 \u043f\u043e\u0442\u0435\u0440\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438         \/\/\u043f\u0440\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432 double         \/\/1.0 % 0.1 = 0.09999999999999995         \/\/1000.0 % 100.0 = 0.0         return (value * 1000) % (Render.PixelSize * 2 * 1000) != 0;     }      \/\/\u041e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0448\u0438\u0440\u0438\u043d\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u0430     private static double ModByPixel(double value)     {         return ((value * 1000) % (Render.PixelSize * 1000)) \/ 1000;     } } <\/code><\/pre>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u043f\u0435\u0440\u0435\u0434 \u0438\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u043c. \u041c\u0435\u0442\u043e\u0434\u044b <i>SnapXXX<\/i> \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043b \u0442\u043e\u0447\u043d\u043e \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439.<\/p>\n<p>  \u041f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0438 \u044d\u043b\u043b\u0438\u043f\u0441\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u044c\u044f\u0445 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0439 \u0448\u0438\u0440\u0438\u043d\u044b. \u0423 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 Y \u0438 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 X, \u0443 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u2014 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u041f\u0440\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u0430\u043a\u0436\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0434\u0432\u0438\u0433 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438. <\/p>\n<p>  \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e \u0441\u0442\u0438\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043a\u043e\u0439:<\/p>\n<pre><code class=\"cs\">public class Washer : SelfDrawingControlBase {     public Washer()     {         _brush = new SolidColorBrush(Color.FromRgb(247, 148, 29));         _brush.Freeze();          _pen = new Pen(Brushes.Black, 1);         _pen.Freeze();     }      protected override void OnRender(DrawingContext dc)     {         \/\/\u041d\u043e\u0436\u043a\u0438         Point start = new Point(1, 21);         Point end = new Point(4, 21);         SnapLine(_pen, ref start, ref end);         dc.DrawLine(_pen, start, end);          start = new Point(12, 21);         end = new Point(15, 21);         SnapLine(_pen, ref start, ref end);         dc.DrawLine(_pen, start, end);          \/\/\u041a\u043e\u0440\u043f\u0443\u0441         var rect = new Rect(0, 0,16, 21);         SnapRectangle(null, ref rect);         dc.DrawRectangle(_brush, null, rect);                  \/\/\u041a\u043d\u043e\u043f\u043a\u0438         start = new Point(12, 1);         end = new Point(12, 4);         SnapLine(_pen, ref start, ref end);         dc.DrawLine(_pen, start, end);          start = new Point(14, 1);         end = new Point(14, 4);         SnapLine(_pen, ref start, ref end);         dc.DrawLine(_pen, start, end);               \/\/\u041e\u043a\u043e\u0448\u043a\u043e         var center = new Point(8, 11);         SnapEllipse(_pen, ref center);         dc.DrawEllipse(    Brushes.White, _pen,                         center, 5, 5);          \/\/\u0417\u0430\u0449\u0435\u043b\u043a\u0430 \u043d\u0430 \u043e\u043a\u043e\u0448\u043a\u0435         rect = new Rect(10, 10, 4, 2);         SnapRectangle(_pen, ref rect);         dc.DrawRectangle(Brushes.White, _pen, rect);     }      private Pen _pen;     private Brush _brush; } <\/code><\/pre>\n<p>  <img decoding=\"async\" align=\"left\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1e6\/6c2\/88e\/1e66c288effc38d370c9eb6f9c0abe63.gif\"\/>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0443 \u0441 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0438, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/90a\/258\/f95\/90a258f95579a5188b6531b7918aa094.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/90a\/258\/f95\/90a258f95579a5188b6531b7918aa094.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/90a\/258\/f95\/90a258f95579a5188b6531b7918aa094.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/90a\/258\/f95\/90a258f95579a5188b6531b7918aa094.gif\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/90a\/258\/f95\/90a258f95579a5188b6531b7918aa094.gif\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 96 dpi \u2014 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043f\u0435\u0440\u0430 \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043a\u043e\u0434\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u0432 \u043b\u044e\u0431\u044b\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445, \u0442\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u044b <i>SnapXXX<\/i>, \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0442\u044c \u0434\u043e \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u043c<i> Render.SnapToPixels<\/i>.<br clear=\"all\"\/>  \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043d\u0442\u0440\u043e\u043b, \u0440\u0438\u0441\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439:<\/p>\n<pre><code class=\"cs\">public class CrossDpiBrick : SelfDrawingControlBase {     public CrossDpiBrick()     {         _brush = new SolidColorBrush(Color.FromRgb(247, 148, 29));         _brush.Freeze();          _pen = new Pen(Brushes.Black, Render.SnapToPixels(7));         _pen.Freeze();     }      protected override void OnRender(DrawingContext dc)     {         var rect = new Rect(Render.SnapToPixels(10),                             Render.SnapToPixels(10),                             Render.SnapToPixels(120),                             Render.SnapToPixels(40));          SnapRectangle(_pen, ref rect);          dc.DrawRoundedRectangle(_brush, _pen, rect,                                 Render.SnapToPixels(10),                                 Render.SnapToPixels(10));     }      private Pen _pen;     private Brush _brush; } <\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/840\/fa4\/17c\/840fa417cc4866be9653edae2a5d9ca0.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/8d2\/938\/aaa\/8d2938aaaa82ceb8cd2f9115b59ec15a.png\"\/><\/div>\n<p>  \u0420\u0443\u0447\u043d\u0430\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438, \u0447\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 WPF, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<p>  <a name=\"outro\"><\/a><\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  WPF \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0432\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u044d\u043a\u0440\u0430\u043d\u043d\u044b\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c. \u0412 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u044d\u0442\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u0438\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u0435 \u0433\u043e\u043b\u043e\u0432\u0443 \u0441\u0430\u0431\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0434\u0432\u0438\u0433\u0430\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0442\u043a\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0438 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. <\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u0430\u0436\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u043e\u0442 Microsoft \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0445\u0432\u0430\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432 Microsoft Word 2010:   <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/d3a\/0d8\/a54\/d3a0d8a54915eb767c055b3851d6654d.png\"\/><\/div>\n<p>  \u0417\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b? \u0415\u0441\u043b\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0432\u0430\u0441 \u043b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u2014 \u0434\u0435\u043b\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0438, \u0446\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<p>  <a name=\"links\"><\/a><\/p>\n<h4>\u0421\u0441\u044b\u043b\u043a\u0438 <\/h4>\n<p>  <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa970908%28v=vs.85%29.aspx\">MSDN \u2014 Pixel Snapping in WPF Applications<\/a> <br \/>  <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.windows.uielement.uselayoutrounding%28v=vs.95%29.aspx\">MSDN \u2014 UIElement.UseLayoutRounding Property <\/a><br \/>  <a href=\"http:\/\/10rem.net\/blog\/2010\/06\/06\/wpf-and-silverlight-choose-your-fonts-and-text-rendering-options-wisely\">Pete Brown \u2014 Choose your Fonts and Text Rendering Options Wisely<\/a><br \/>  <a href=\"http:\/\/blogs.msdn.com\/b\/text\/archive\/2009\/08\/24\/wpf-4-0-text-stack-improvements.aspx\">MSDN Blogs \u2014 WPF 4.0 Text Stack Improvements<\/a><br \/>  <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa348553%28v=vs.85%29.aspx\">MSDN \u2014 How to: Apply a GuidelineSet to a Drawing<\/a><br \/>  <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.windows.uielement.snapstodevicepixels%28v=vs.110%29.aspx\">MSDN \u2014 UIElement.SnapsToDevicePixels Property<\/a> <\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432: <a href=\"http:\/\/kozinaka.com\/storage\/habrahabr\/PixelSnapping.zip\">\u0441\u043a\u0430\u0447\u0430\u0442\u044c (104 Kb)<\/a><\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/732\/528\/7d8\/7325287d86af271889d67acfcd7ce0bb.png\"\/> <a href=\"http:\/\/romson.livejournal.com\/tag\/my_pixels\">romson<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/de7\/0cd\/c82\/de70cdc82288543e700c64a00f7507b5.png\"\/> <a href=\"http:\/\/habrahabr.ru\/users\/melkopuz\/\" class=\"user_link\">melkopuz<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/d7b\/a2b\/c85\/d7ba2bc85f5f319ba8d2125f4d5580c6.png\"\/> <a href=\"http:\/\/gamin.ru\/users\/sevendot\">sevendot<\/a> \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/216833\/\"> http:\/\/habrahabr.ru\/post\/216833\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/d6a\/ef1\/44d\/d6aef144d1735196321321daa459bd8c.png\"\/><\/p>\n<p>  \u042d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f WPF-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0441\u0442\u0440\u0435\u043c\u044f\u0449\u0438\u0445\u0441\u044f \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0447\u0451\u0442\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 WPF \u0434\u043e \u043c\u043e\u0437\u0433\u0430 \u043a\u043e\u0441\u0442\u0435\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f, \u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0442\u0440. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u043a\u0442\u0443 \u0434\u043e\u043b\u0436\u043d\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043e\u0440\u0442\u0430\u043c\u0438 \u00ab\u043c\u044b\u043b\u0430\u00bb \u2014 \u043f\u0430\u0440\u0430\u0437\u0438\u0442\u043d\u044b\u043c\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0434\u0443\u0445\u0430, \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0438\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b, \u0430 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u043e\u0440\u044c\u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-216833","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/216833","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=216833"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/216833\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=216833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=216833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=216833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}