powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Назначение обобщённого класса в качестве источника в xaml-шаблоне
6 сообщений из 6, страница 1 из 1
Назначение обобщённого класса в качестве источника в xaml-шаблоне
    #36951498
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу создать шаблон, завязанный на определённый тип. Как это делать в том случае, если тип обобщённый?
У меня есть класс ObservableDictionary<T>, а так же класс ValueInfo. Хочу создать шаблон для ObservableDictionary<ValueInfo>. без указания конкретного ключа, а чтобы он автоматически применялся ко всем объектам типа ObservableDictionary<ValueInfo>.

Пытался сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:bush="clr-namespace:Bushman.Common;assembly=Common"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--Шаблон для ObservableDictionary<ValueInfo>-->
    <DataTemplate DataType="{x:Type bush:ObservableDictionary<bush:ValueInfo>}">
        <StackPanel>
            <Label Content="{Binding Source=DataContext, Path=Key}"/>
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>
Ошибка компиляции:
The type reference cannot find a public type named 'ObservableDictionary<bush:ValueInfo>'.

Затем пробовал делать так (перед ValueInfo убрал "bush:"):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:bush="clr-namespace:Bushman.Common;assembly=Common"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--Шаблон для ObservableDictionary<ValueInfo>-->
    <DataTemplate DataType="{x:Type bush:ObservableDictionary<ValueInfo>}">
        <StackPanel>
            <Label Content="{Binding Source=DataContext, Path=Key}"/>
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>
Ошибка компиляции:
The type reference cannot find a public type named 'ObservableDictionary<ValueInfo>'.

Меня терзают смутные сомнения, что в XAML-разметке нельзя задать источником объекты обобщённых классов...
Если в окне xaml-редактора я ставлю символ ":" после "bush" - то в раскрывающемся списке отсутствует нужный мне обобщённый класс, хотя на самом деле он есть в указанном пространстве.

Третий вариант был таким (хотя мне бы хотелось указать не "T", а конкретный тип, поскольку тогда можно было бы назначить разные шаблоны исходя из типа значений словаря, т.е. один шаблон для ObservableDictionary<ValueInfo>, другой для ObservableDictionary<FileInfo>, и т.д. и т.п.):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:bush="clr-namespace:Bushman.Common;assembly=Common"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--Шаблон для ObservableDictionary<ValueInfo>-->
    <DataTemplate DataType="{x:Type bush:ObservableDictionary<T>}">
        <StackPanel>
            <Label Content="{Binding Source=DataContext, Path=Key}"/>
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>

Ошибка компиляции:
The type reference cannot find a public type named 'ObservableDictionary<T>'.




Я не очень доверяю XAML-редактору MS VS 2010, т.к. неоднократно сталкивался с тем, что верный синтаксис он подчёркивал как ошибку, но при компиляции всё работало как часы. Возможно и с отображением обобщённых классов в раскрывающемся списке - такая же фигня...
...
Рейтинг: 0 / 0
Назначение обобщённого класса в качестве источника в xaml-шаблоне
    #36951594
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x:TypeArguments="bush:ValueInfo"
?
...
Рейтинг: 0 / 0
Назначение обобщённого класса в качестве источника в xaml-шаблоне
    #36951663
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRx:TypeArguments="bush:ValueInfo"
?похоже, не получится
msdnIn WPF, you can use XAML 2009 features but only for loose XAML (XAML that is not markup-compiled). Markup-compiled XAML for WPF and the BAML form of XAML do not currently support the XAML 2009 keywords and features.
...
Рейтинг: 0 / 0
Назначение обобщённого класса в качестве источника в xaml-шаблоне
    #36951719
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, здесь ответ (мокрософтовца)
...
Рейтинг: 0 / 0
Назначение обобщённого класса в качестве источника в xaml-шаблоне
    #36951737
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRда, здесь ответ (мокрософтовца)
спасибо за линк. да... хреново, что не реализовано - очень нужный функционал... (((
...
Рейтинг: 0 / 0
Назначение обобщённого класса в качестве источника в xaml-шаблоне
    #36952979
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь показано нечто похожее на то, что мне нужно - в разделе XAML 2009 ... Эх... недотянули немного... (((
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Назначение обобщённого класса в качестве источника в xaml-шаблоне
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]