Как установить пользовательский VisualStateManager из кода позади? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть элемент управления, который обычно используется в моем приложении, но его необходимо подключать к различным классам в зависимости от того, где он используется.Я хотел бы реализовать базовый класс, производный от UserControl, а затем наследовать классы от него, которые присоединяются к различным моделям, каждая из которых также является производной от базового класса.

Итак, у меня есть наборбазовые классы (BaseControlView, BaseControlViewModel, BaseControlModel), из которых я извлекаю три класса (CarControlView, CarControlViewModel, CarControlModel) и три класса (TruckControlView, TruckControlViewModel, TruckControlModel).Набор свойств для автомобиля и грузовика пересекается, но не полностью, и я не знаю, каким образом я могу использовать коллекцию базового класса для доступа к элементам, содержащимся в автомобиле или грузовике.

Элемент управлениясам использует пользовательский VisualStateManager для управления изменениями состояния, и для этого ему нужно будет ссылаться на некоторые специфичные для производного класса данные из своих коллекций.

Я все понял, ноУ меня есть камнем преткновения, как обрабатывать производные VisualStateManager.Xaml, где я указываю, выглядит следующим образом:

<UserControl x:Class="View.BaseControl" ... >
    <UserControl.Resources>
        <!-- All the stuff to get me here -->
        <VisualStateManager.CustomVisualStateManager>
            <local:BaseControlStateManager/>        <! <<<<--- Here! -->
        </VisualStateManager.CustomVisualStateManager>
        <!-- The rest of the control template definition -->
    </UserControl.Resources>
    <Grid>
        <!-- My components go here -->
    </Grid>
</UserControl>

Он находится в шаблоне элемента управления внутри ресурсов элемента управления.

Я бы хотел избежать создания и изменения копиифайл xaml базового класса для каждого производного класса, поэтому я подумал, что если бы я мог установить CustomVisualStateManager в конструкторе в коде позади, у меня мог бы быть пустой xaml - только внешнее определение - для производного класса:

<local:BaseControl x:Class="View.CarControl" ... >
</local:BaseControl>

Вы знаете, как я могу это сделать?

...