суббота, 9 августа 2008 г.

"Choose Folder" в WPF

Technorati Теги: ,

Очень часто мне требуется диалог с помощью которого пользователь могбы выбрать диалог на жестком диске. Но к большому сожалению в WPF не предоставляет такой функциональности. Ответ мы можем найти в пространстве имен Windows.Forms и вызовем диалог оттуда. Нижеприведенный кусочек кода демонстрирует нужную функциональность.

 

  folder

System.Windows.Forms.FolderBrowserDialog fd = new System.Windows.Forms.FolderBrowserDialog();
fd.ShowDialog();
selectedFolder.Text = fd.SelectedPath;
* This source code was highlighted with Source Code Highlighter.

среда, 6 августа 2008 г.

В полку community WPF прибавление

Technorati Теги: ,

Открылся новостной сайт аля Digg  посвященный моему любимому WPF.

http://www.dotnetkicks.com/

понедельник, 4 августа 2008 г.

Создаем закрываемые TabItem

Technorati Теги:
Шаг 1. Создадим специальный шаблон и стиль для tabitem

Первый шаг модифицируем представление заголовка tabitem так, чтобы он содержал кнопку которая бы проявлялась на всех tabitem, где определен наш заголовок. Код XAML который требуется для этого выглядит примерно так:

 

<TabControl>
    <TabControl.Resources>       
        <DataTemplate x:Key="CustomTabHeader">
            <StackPanel Orientation="Horizontal">
                <ContentPresenter>
                    <ContentPresenter.Content>
                        <Binding Path="Header">
                            <Binding.RelativeSource>
                                <RelativeSource Mode="FindAncestor"
                                                AncestorType="{x:TypeabItem}"/>

                            </Binding.RelativeSource>
                        </Binding>
                    </ContentPresenter.Content>
                </ContentPresenter>
                <Button Margin="8,0,0,0" Click="OnCloseButtonClick"
                        HorizontalContentAlignment="Center"
                        VerticalContentAlignment="Center">

                    <Grid>
                        <Canvas Width="8" Height="8">
                            <Line X1="2" X2="6" Y1="2" Y2="6"
                                  Stroke="Black" StrokeThickness="1"/>

                            <Line X1="6" X2="2" Y1="2" Y2="6"
                                  Stroke="Black" StrokeThickness="1"/>

                        </Canvas>
                    </Grid>
                </Button>
            </StackPanel>
        </DataTemplate>   
        <Style TargetType="TabItem">
            <Style.Setters>
                <Setter Property="HeaderTemplate"
                        Value="{StaticResource CustomTabHeader}"/>

            </Style.Setters>
        </Style>
    </TabControl.Resources>
</TabControl>Syhi-подсветка кода
Шаг 2. Закрываем tabitem

Второй шаг потребует написания небольшого куска кода. Вот и он.

private void OnCloseButtonClick(object sender, RoutedEventArgs e)
{
    FrameworkElement parent = e.OriginalSource as FrameworkElement;

    while (parent != null && !(parent.Parent is TabItem))
    {
        parent = parent.Parent as FrameworkElement;
    }

    if (parent != null)
    {
        FrameworkElement view = (parent as TabItem).Content as FrameworkElement;
        string regionName = RegionManager.GetRegionName(view);

        _regionManager.Regions[regionName].Remove(view);
    }
}Syhi-подсветка кода
Заключение
Конечно традиционный вид tabitem может быть выглядеть более симпатичным, но с другой стороны все это не является препятствием для включение этого шаблона в своим проекты.