Я не уверен, что вы назвали бы это аккуратным, но ...
- Создайте себе новый шаблонный элемент управления и назовите его
ImmovableChildWindow
.
- Измените класс, от которого он наследуется, до
ChildWindow
.
- Откройте Themes / generic.xaml, вы найдете начальный стиль для
ImmoveableChildWindow
- В документации Silverlight вы найдете существующий шаблон для ChildWindow в Стили и шаблоны ChildWindow .
- Обратите внимание на существующее значение TargetType для стиля
ImmovableChildWindow
.
- Скопируйте и вставьте весь стиль по умолчанию для ChildWindow из документации в ваш файл themes / generic.xaml.
- Замените
TargetType
для этой копии на то же значение, что и у существующего стиля ImmovaleChildWindow
.
- Теперь вы можете удалить начальный стиль. Оставьте только большую копию стиля ChildWindow, теперь нацеленную на
ImmovableChildWindow
.
- Найдите в установщике
Template
значение TargetType
, равное стилю TargetType
- Выполните поиск по шаблону и найдите
Border
с именем Chrome . Удалите атрибут x:Name="Chrome"
. (Это то, что мы действительно после).
Теперь, когда вы создаете новый элемент ChildWindow, он по умолчанию наследует форму ChildWindow
, если вы хотите, чтобы он был неподвижным, вам нужно изменить его, чтобы он вместо этого наследовал от ImmovableChildWindow
(измените базовый тип в коде и имя корневого тега в xaml).
ChildWindow
присоединяет события к FrameWorkElement
с именем «Chrome», которое позволяет перемещать дочернее окно. Несмотря на то, что шаблонный элемент управления хорошо себя ведет, если он не может найти FrameworkElement
под названием "Chrome", он просто продолжает работать без этой функции.