31 мая 2007 г.

Использование стандартных тем в WPF

Решил недавно изучить WPF и столкнулся с тем, что у меня кнопочка в приложении выглядела в классическом стиле Windows, а не как те красивости, что можно увидеть в туториалах в интернете. Стал разбираться... Как оказалось, в WPF есть несколько стандартных тем: Aero (как в Windows Vista), Luna (Windows XP), Royale (Windows XP Media Center Edition / Tablet PC Edition) и Classic (как в Windows 2000). И движок WPF автоматически подбирает тему для контролов, соответствующую теме Windows. Это все замечательно, но при использовании любой нестандартной темы, WPF использует Classic, что выглядит сиро и убого... Вот тут в небольшом туториале показано, как с этим бороться, однако IronPython - это вам не XAML. Пришлось немного поизголяться... И вот что из этого получилось:

import clr
clr.AddReference('PresentationFramework')
# добавляем reference на тему WPF
clr.AddReference('PresentationFramework.Aero')

from System import *
from System.Windows import *
from System.Windows.Controls import *

a = Application()

# подцепляем merged dictionary к ресурсам
r = ResourceDictionary()
u = Uri('/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml', UriKind.Relative)
r.Source = u
a.Resources.MergedDictionaries.Add(r)

w = Window()
b = Button()
w.AddChild(b)

a.Run(w)

В результате получается вот такая красота:


15 марта 2007 г.

Memori.ru & Blogger

сегодня вышел на работу, несмотря на то что все еще болею... настроения работать естественно нет, поэтому полдня ковырялся с memori.ru и blogger'ом. memori - это новый отечественный сервис социальных закладок от создателя bobrdobr.ru. сейчас находится в закрытом тестировании. понравился больше бобра, интерфейс пориятнее, но все равно не все еще реализовано. а ковырялся я, собственно, с шаблоном блоггера, т.к. хотел в конце каждого поста добавить кнопку memori. вот такую:

<a href=http://memori.ru/link/
title="Запомнить эту страницу!"
onClick="location.href='http://memori.ru/link/?sm=1
&u_data[url]='+encodeURIComponent(document.location.href)+
'&u_data[name]='+escape(document.title);return false;" >
<img src=http://memori.ru/img/site/memori.gif
width=16 height=16 border=0
title='Запомнить эту страницу!'>
</a>

в результате получился вот такой кусок кода:

<span class='post-icons'>
<!-- memory.ru button -->
<span class='item-action'>
<a expr:onclick='"javascript:location.href=
\"http://memori.ru/link/?sm=1&amp;u_data[url]=\" +
encodeURIComponent(\"" + data:post.url + "\") +
\"&amp;u_data[name]=\" + escape(\"" +
data:blog.title + ": " + data:post.title +
"\"); return false"'
href='http://memori.ru/link/'
title='Запомнить эту страницу!'>
<img border='0' height='16' width='16'
src='http://memori.ru/img/site/memori.gif'
title='Запомнить эту страницу!'/>
</a>
</span>

...

</span>

вобщем-то, разобраться в шаблоне было не очень сложно, проблема возникла с expr:onclick, как видно из кода, там javascript очень хитро запрятан в кавычки '"javascript: ..."'. а возиться с этим гемором пришлось потому, что хотелось чтобы кнопка в каждом посте добавляла в закладки именно его, а не сам блог, что происходило бы при нажатии на кнопку на главной странице, а не на странице поста. легких путей искать не захотелось, поэтому сделал все по-человечески)))

P.S. а swiftpen пока меня не очень прет: идея хорошая, а вот реализация подкачала. на то оно и бета...