Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из ресурса - UserControl, Не компилируется при binding'e 
:(
    Опции темы
Dem0n13
Дата 30.5.2011, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 4.12.2009
Где: Россия, Калуга

Репутация: нет
Всего: нет



Добрый день!

После того, как я разобрался с binding вот в этой теме, я решил вынести описание TreeListView в отдельный UserControl.

Начал, собственно, с создания UserControl'a, унаследовал его от TreeView (как и в оригинале). 

Файл Xaml выглядит так:
Код

<TreeView x:Class="Dem0n13.Controls.TreeListView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MinHeight="60" MinWidth="60"
             xmlns:local="clr-namespace:Dem0n13.Controls">
    <TreeView.Resources>
        <!--Реализация кнопки-плюса-->
        <Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
            <Setter Property="Focusable" Value="False"/>
            <Setter Property="Width" Value="19"/>
            <Setter Property="Height" Value="13"/>
            <!--Шаблон кнопки (плюс)-->
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}" x:Name="ToggleButtonArea">
                        <Image Name="MinimizedIconImg" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=MinimizedIcon}"/>
                        <!--Триггер на раскрытый элемент (минус)-->
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type ToggleButton}" x:Name="ToggleButtonArea">
                                            <Image Name="MaximizedIconImg" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=MaximizedIcon}"/>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <!--Отступы-->
        <local:LevelToIndentConverter x:Key="LevelToIndentConverter"/>

        <!--Реализация первой ячейки-->
        <DataTemplate x:Key="CellTemplateName">
            <DockPanel>
                <ToggleButton x:Name="Expander" Style="{StaticResource ExpandCollapseToggleStyle}" Margin="{Binding Level, Converter={StaticResource LevelToIndentConverter},RelativeSource={RelativeSource AncestorType={x:Type local:TreeListViewItem}}}" IsChecked="{Binding Path=IsExpanded,RelativeSource={RelativeSource AncestorType={x:Type local:TreeListViewItem}}}" ClickMode="Press"/>
                <TextBlock Text="{Binding Path=Name}"/>
            </DockPanel>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Path=HasItems, RelativeSource={RelativeSource AncestorType={x:Type local:TreeListViewItem}}}" Value="False">
                    <Setter TargetName="Expander" Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>

        <!--Реализация второй ячейки-->
        <DataTemplate x:Key="CellTemplateIs">
            <Button Content="{Binding Path=Path1}"/>
        </DataTemplate>

        <!--Описание столбцов-->
        <GridViewColumnCollection x:Key="gvcc">
            <GridViewColumn Header="Name" CellTemplate="{StaticResource CellTemplateName}" />
            <GridViewColumn Header="Второй столбец" CellTemplate="{StaticResource CellTemplateIs}" />
        </GridViewColumnCollection>

        <!--Описание шаблона каждого элемента-->
        <Style TargetType="{x:Type local:TreeListViewItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:TreeListViewItem}">
                        <StackPanel>
                            <!--Заголовок-->
                            <Border Name="Bd" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
                                <GridViewRowPresenter x:Name="PART_Header" Content="{TemplateBinding Header}" Columns="{StaticResource gvcc}" />
                            </Border>
                            <!--Все, что ниже-->
                            <ItemsPresenter x:Name="ItemsHost"/>
                        </StackPanel>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsExpanded" Value="false">
                                <Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed"/>
                            </Trigger>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="HasHeader" Value="false"/>
                                    <Condition Property="Width" Value="Auto"/>
                                </MultiTrigger.Conditions>
                                <Setter TargetName="PART_Header" Property="MinWidth" Value="75"/>
                            </MultiTrigger>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="HasHeader" Value="false"/>
                                    <Condition Property="Height" Value="Auto"/>
                                </MultiTrigger.Conditions>
                                <Setter TargetName="PART_Header" Property="MinHeight" Value="19"/>
                            </MultiTrigger>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                            </Trigger>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsSelected" Value="true"/>
                                    <Condition Property="IsSelectionActive" Value="false"/>
                                </MultiTrigger.Conditions>
                                <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                            </MultiTrigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.Resources>

    <!--Описание шаблона всего компонента-->
    <TreeView.Template>
        <ControlTemplate>
            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                <DockPanel>
                    <GridViewHeaderRowPresenter Columns="{StaticResource gvcc}" DockPanel.Dock="Top"/>
                    <ItemsPresenter/>
                </DockPanel>
            </Border>
        </ControlTemplate>
    </TreeView.Template>
</TreeView>

Сделано криво, понимаю.
Без привязки этот компонент работает - компилится, запускается, показывает заголовки таблицы. Как только привязываю (как привязывал раньше):
Код

<Window.Resources>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type lib:DiffItem}"/>
    </Window.Resources>
    <StackPanel x:Name="DiffPanel">
        <DC:TreeListView x:Name="TLW" ItemsSource="{Binding Instance, Mode=OneWay}"></DC:TreeListView>
    </StackPanel>


, то вылетает с ошибкой: 
Свойство "Template" нельзя задать в Template текущего элемента.

Прилагаю достаточный исходник.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  TreeListViewMS.zip 326,62 Kb
PM MAIL ICQ   Вверх
-Mikle-
Дата 30.5.2011, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Код

  <TreeView.Template>
        <ControlTemplate>
            <Border BorderBrush="{....................

Проект не смотрел, но помоему тебе надо в ControlTemplate указать атрибут TargetType="{x:Type TreeView}".


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Dem0n13
Дата 30.5.2011, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 4.12.2009
Где: Россия, Калуга

Репутация: нет
Всего: нет



-Mikle-
Сделал, 0 изменений...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1156 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.