Silverlight - предотвращение движения ChildWindow - PullRequest
0 голосов
/ 20 апреля 2010

Кто-нибудь получил какие-нибудь изящные решения для предотвращения перемещения Silverlight ChildWindow?

спасибо, Mark

Ответы [ 3 ]

1 голос
/ 06 декабря 2011

Не требуется для создания нового класса, вместо этого

  1. Скопируйте стиль из: http://msdn.microsoft.com/en-us/library/dd833070%28VS.95%29.aspx
  2. Give x:key="stylename"
  3. In Construtor ofChildwindow, вставьте следующий код перед InitializeComponent:

    this.Style = App.Current.Resources["childWindow"] as Style;

Решение выше, решило мою проблему

1 голос
/ 20 апреля 2010

Я не уверен, что вы назвали бы это аккуратным, но ...

  • Создайте себе новый шаблонный элемент управления и назовите его 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", он просто продолжает работать без этой функции.

0 голосов
/ 15 марта 2011

Может быть, вы можете попробовать этот простой способ сделать это: создать сетку, чтобы деформировать все содержимое в вашем ChildWindow.

<Grid Margin="0">

<!--Your ChildWindow. Canvas, Grid, Textblock...Whatever-->

</Grid>

Поскольку у сетки есть поле 0, вы не можете щелкнуть по нему и переместитьэто.

...