Разрешить только детей определенного типа в WPF / XAML? - PullRequest
1 голос
/ 16 января 2012

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

Теперь я хочу предоставить пользовательский элемент управления для пользователя, который получен из Border (назовем его MyFrame).

Мне нужно убедиться, что MyFrame не может быть дочерним по отношению к другому MyFrame, поэтому следует предотвратить следующее:

<ns:MyFrame>
    <Grid>
        <ns:MyFrame />
    </Grid>
</ns:MyFrame>

Как мне это реализовать?

Ответы [ 2 ]

3 голосов
/ 16 января 2012

Вы не сможете сделать это во время компиляции.

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

1 голос
/ 16 января 2012

Я бы вызвал исключение с чистым сообщением от обработчика событий Loaded на MyFrame: пошагово пройдем по предкам нового экземпляра MyFrame и попытаемся найти другой; если найдешь, брось исключение.

Альтернатива: используйте наследуемое присоединенное свойство, которое вы устанавливаете во всех экземплярах MyFrame, и проверьте это в обработчике Loaded.

Я не могу представить какой-либо способ принудительно применять ваше правило.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...