вторник, 29 января 2013 г.

Перемещение/resize окна в WPF

Проблема: хочу сделать окно со своим дизайном на WPF, но при убирании бордюра (NoBorder) оно перестает ресайзиться и двигаться за заголовок

Решение: Специально для этого в 7 и Vista есть библиотечка с пространством имен Microsoft.Windows.Shell, физически лежащим в PresentationFramework.dll. Там есть класс WindowChrome. Это лучше понимать как "хром окна", но по факту не только окна, но и любого элемента. Он содержит в себе набор attached-пропертей для манипулирования неклиентской областью окна. Пример:

<Style TargetType="{x:Type Window}">
        <Setter Property="shell:WindowChrome.WindowChrome">
            <Setter.Value>
                <shell:WindowChrome 
                                    CaptionHeight="24"
                                    CornerRadius="0"
                                    GlassFrameThickness="0,0,0,-1"
                                    NonClientFrameEdges="None"
                                    ResizeBorderThickness="7"
                                    UseAeroCaptionButtons="False"/>
            </Setter.Value>
        </Setter>
</Style>

Тут можно задать высоту невидимого заголовка и толщину невидимых бордюров для изменения размеров. Невидимый заголовок в данном случае будет - полоска сверху окна высотой в 24px, за которую можно будет потянуть и перетащить окно. Если вам нужно разместить в этой зоне еще какие-нибудь элементы - не забудьте проставить им 

shell:WindowChrome.IsHitTestVisibleInChrome="True"

А для ResizeGrip (или за что у вас там тянется, чтобы изменить размер окна):

shell:WindowChrome.ResizeGripDirection="BottomRight"

И все проблемы с перемещением окна будут решены.

YouTrack

Если в YouTrack поставить на аватарку какую-нибудь яркую цветную иконку, то на agile board свои задачи будет видно куда лучше.

вторник, 15 января 2013 г.

T4

Используйте T4, когда возникает необходимость генерировать текст или код.

Тут качается, а тут читается. В общем и целом - очень похоже на Razor/ASP.NET MVC. 

WPF и Windows 8

Проблема: хочу сделать интерфейс в своем WPF-приложении, как в Windows 8 или Office 2013

Решение: Microsoft не затрудняет себя, как правило, разработкой паков GUI-вещей после выхода каждого нового продукта. На этом зарабатывают многие компании. И эта беда не обошла Windows 8. К счастью, есть энтузиасты, сделавшие почти все элементы Windows 8 на WPF и подготовившие их к использованию. Найти их с исходниками можно вот тут: http://elysium.codeplex.com/

Да. Ни в коем случае не пытайтесь повторить их путь, особенно при сжатых сроках - потратите уйму времени и соберете дикое количество граблей.