Что будет хорошим подходом для нескольких приложений Silverlight с общими элементами управления? - PullRequest
0 голосов
/ 31 октября 2011

Я довольно новичок в Silverlight и мне приходится кодировать несколько приложений SL, которые будут делиться многими вещами.

Я планирую поместить весь общий код C # в отдельную сборку, но я действительно раздражен XAMLpart.

Все мои приложения будут иметь некоторые общие элементы управления:

  • строка меню вверху,
  • панель инструментов вверху,
  • строка состояния внизу,
  • панель слева.

Я искал в Интернете подсказки и обнаружил, что код XAML не может быть унаследован.

Поэтому я подумал о создании большого настраиваемого элемента управления, содержащего мои общие элементы управления, и последующем добавлении его на главную страницу всех моих приложений, но это не совсем правильный путь.

Какова здесь лучшая практика?

Любая помощь приветствуется,

РЕДАКТИРОВАТЬ: То, что я хотел бы получить здесь, это то, что я уже сделал с WinForms.Я создал «базовую» WinForm и наложил на нее некоторые элементы управления.Затем, когда я создал новые WinForms, которые унаследовали эту «базовую» WinForm, у них были все основные элементы управления.Мне не пришлось использовать какой-либо пользовательский контроль.

Но я понимаю, что Silverlight - это не WinForm, и то, что я хочу, может оказаться невозможным (или вообще?).

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Это зависит от маршрута, который вы хотите выбрать, хотите ли вы создать один файл ресурсов с некоторыми шаблонами и т. Д., Который будет копироваться / связываться в каждое приложение отдельно или использовать что-то, включенное в общую DLL.

Если вы хотите сделать последнее, вот один из подходов. Подкласс ContentControl для определения вашего общего макета в его шаблоне управления (вы можете сделать все это в XAML), включая привязку к его Содержанию в соответствующем месте:

<ContentControl x:Class="MyLibrary.MyLayoutControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ContentControl.Template>
        <ControlTemplate TargetType="ContentControl">
            <!-- this could be a layout grid with various other controls in it -->
            <Border BorderBrush="Red" BorderThickness="2" CornerRadius="5">
                <ContentPresenter Content="{TemplateBinding Content}" />
            </Border>
        </ControlTemplate>
    </ContentControl.Template>
</ContentControl>

Затем используйте его в корне вашего приложения:

<UserControl x:Class="InCustomControlTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:MyLibrary;assembly=MyLibrary">

    <c:MyLayoutControl>
        <Button Content="Hi I am a button" />
    </c:MyLayoutControl>
</UserControl>

Если вы хотите сделать что-то более сложное, вы должны сделать пользовательский элемент управления; хотя в большинстве случаев вы можете избежать нескольких пользовательских элементов управления для различных компонентов (например, строки состояния), которые вы перетаскиваете в нужное место.

0 голосов
/ 31 октября 2011

Нет большой проблемы с размещением ресурсов xaml в библиотечных проектах. При ссылках на ресурсы из других проектов обязательно указывайте имя сборки. Также есть наследование шаблонов, где вы можете поставить атрибут BasedOn.

Edit: хорошо, глядя на проект, над которым мы работали некоторое время назад, теперь я помню, что у нас действительно были проблемы с ним, и ресурсы xaml были скопированы для каждого проекта ... Я забыл =) Я думаю, что это сработало, но принесло некоторые проблемы здесь и там. Может быть, добавить файлы xaml в виде ссылок?

Лично я бы не стал создавать много элементов управления, а имел бы шаблоны для большинства вещей. Если у вас есть элементы управления, лучше писать их на c # только с использованием шаблонов, предотвращая xaml с остатками кода. Только мой личный опыт, возможно, не является общим руководством.

...