Использование MergedDictionaries в generic.xaml в Silverlight 3 - PullRequest
9 голосов
/ 27 марта 2009

В WPF можно было организовать XAML для нескольких пользовательских элементов управления, сохранив разметку в отдельных файлах XAML в папке тем, а затем с помощью MergedDictionaries импортировать их в generic.xaml:

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="MyFirstControl.xaml" />
        <ResourceDictionary Source="MySecondControl.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

С появлением бета-версии Silverlight 3 с поддержкой объединенного словаря казалось, что можно сделать то же самое с пользовательскими элементами управления Silverlight. Но, несмотря на то, что я попробовал все комбинации действий по сборке для объединенных файлов словарей и соответствующего синтаксиса для ссылки на источник в generic.xaml, я не могу заставить его работать.

Кто-нибудь еще пробовал? Кто-нибудь знает, возможно ли это, и если да, то что я делаю не так?


ОК - поэтому после многочисленных тестовых проектов, получения рабочих образцов в WPF и перемещения кода XAML и C # в Silverlight 3, но он все еще не работает, я полностью удалил и переустановил ВСЕ биты Silverlight 2 И ВСЕ Silverlight 3 бета-биты и, наконец, все заработало.

Я могу только предположить, что я каким-то образом закончил с ошибочной установкой бета-версии - я не знаю, но мне показалось, что я все еще работал во время выполнения Silverlight 2, несмотря на то, что, очевидно, установлена ​​среда выполнения версии 3.

Спасибо Джареду за то, что он посмотрел на вещи и сверился с командой SL3 ... и благодаря Эми Дуллард и Шону Вильдермуту за создание инструкций и командных файлов для запуска Silverlight 2 и 3 на одной машине.

Ответы [ 3 ]

12 голосов
/ 27 марта 2009

Я только что попробовал следующее в пользовательском элементе управления, и это сработало:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ResourcesA.xaml" />
            <ResourceDictionary Source="ResourcesB.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
<StackPanel>
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResAColor}" />
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResBColor}" />
</StackPanel>

Но вы специально упомянули generic.xaml. Какие у вас проблемы?

- РЕДАКТИРОВАТЬ

На основании дополнительных комментариев я поговорил с командой SL3 и получил следующий ответ:

Работает для меня, используя generic.xaml, скомпилированный в качестве ресурса, и используя полный синтаксис ресурса. Существует ошибка, связанная с невозможностью использования относительных URI для источника в generic.xaml (31783), но не относительная форма должна нормально работать

<ResourceDictionary Source='/SilverlightClassLibrary1;component/CustomControl.xaml'/>

в generic.xaml и измените действия сборки для generic.xaml и CustomControl.xaml в качестве ресурса. Дайте мне знать, если проблемы все еще есть - если вы получите репродукцию, я могу взглянуть на нее.

Это помогает?

1 голос
/ 15 апреля 2011

Если MySecondControl.xaml использует ресурс из MyFirstControl.xaml, порядок добавления их в ResourceDictionary в generic.xaml не имеет значения. Вам нужно будет избыточно включить MyFirstControl.xaml в MySecondControl.xaml. MySecondControl.xaml должно содержать:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source='/MyControls;component/Themes/MyFirstControl.xaml'/>
</ResourceDictionary.MergedDictionaries>
<!-- ... Contents of MySecondControl.xaml -->
0 голосов
/ 09 января 2012

Я только что проработал эту проблему. ResourceDictionaries поддерживают MergedDictionaries, но для пользовательских шаблонных элементов управления, использующих Generic.xaml, Generic.xaml не поддерживает MergedDictionaries. Таким образом, есть два варианта: (1) вы либо складываете все свои шаблоны в Generic.xaml; или (2) вы создаете YourOwnDictionary.xaml, объединяете все свои отдельные словари в YourOwnDictionary.xaml и ссылаетесь на YourOwnDictionary.xaml из пользовательских элементов управления и страниц. Похоже, это функция / ошибка из более ранних версий Silverlight, не поддерживающих объединенные словари.

...