Пользовательский вид WPF без Generic.xaml - PullRequest
0 голосов
/ 12 октября 2010

Я пытаюсь реализовать пользовательские представления, специфичные для приложения, без какой-либо удачи.Вот моя проблема: мне нужно пользовательское представление, потому что я хотел бы, чтобы пользователь мог динамически переключать представления во время выполнения.Мне нужно пользовательское представление (в отличие только от таблиц данных), потому что необходимо изменить макет списка, а также шаблон элемента управления и шаблон данных.Во всех турориалах говорится о реализации пользовательских классов, которые наследуются от viewbase, и переопределяют DefaultStyleKey и ItemContainerDefaultStyleKey для возврата ComponentResourceKey, определенного в generic.xaml.Однако проблема в том, что я пытаюсь создать несколько представлений, которые очень специфичны для этого приложения.определенные кисти и шрифты будут единообразными в приложении , и пользовательские представления будут использовать их.т.е. у меня есть прикладной уровень Forebrush, Shadowbrush, Deepshadowbrush, TextDecorator и т. д., и я хочу, чтобы представления использовали их.Если представление будет определено во внешнем generic.xaml, это будет очень сложная разметка для привязки к ним.И кроме того, это в любом случае сделает их специфичными для приложения (если они будут привязаны к этим кистям).У кого-нибудь есть идеи, как определить стили для внутренних представлений в приложении, которые можно будет изменять во время выполнения?

1 Ответ

0 голосов
/ 12 октября 2010

Я немного запутался в ваших данных, однако вы можете установить стиль ListView во время выполнения как таковой ... где CustomStyle - это предопределенный стиль, который вы хотите применить к ListView.

ListView view = new ListView();
view.Style = CustomStyle;

DefaultStyleKey применим к пользовательскому элементу управления (это отличается от UserControl).Скажем, вы хотите новый элемент управления под названием Widget.Вам не нужно определять DefaultStyleKey для этого виджета, так как для него не определен стиль по умолчанию.UserControl - это набор элементов управления, поэтому он не имеет заранее определенного стиля как такового.

Кроме того, вы можете создать ResourceDictionary для разделения ваших стилей.Затем вы можете объединить их через App.xaml как таковой ...

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Themes/Generic.xaml"/>
                <ResourceDictionary Source="Themes/ListViewStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
...