Silverlight - 防止ChildWindow移动

时间:2010-04-20 10:41:56

标签: silverlight silverlight-3.0 childwindow

任何人都有任何可靠的解决方案来防止Silverlight ChildWindow被移动?

感谢, 标记

3 个答案:

答案 0 :(得分:1)

我不确定你会打电话给这个但是......

  • 创建一个新的模板化控件并将其命名为ImmovableChildWindow
  • 将其继承的类修改为ChildWindow
  • 打开主题/ generic.xaml,您会找到ImmoveableChildWindow
  • 的初始样式
  • 在Silverlight文档中,您将在ChildWindow Styles and Templates找到ChildWindow的现有模板。
  • 请注意ImmovableChildWindow样式的现有TargetType值。
  • Copy'n'将文档中的ChildWindow的默认样式粘贴到themes / generic.xaml文件中。
  • 将此副本的TargetType替换为与退出的ImmovaleChildWindow样式相同的值。
  • 您现在可以删除初始样式。仅保留现在定位ImmovableChildWindow的ChildWindow样式的大型副本。
  • Template设置器中查找将TargetType更改为与样式TargetType相同的值
  • 搜索模板,找到名称为 Chrome Border。删除x:Name="Chrome"属性。 (这就是我们真正追求的目标)。

现在,当您创建一个新的ChildWindow项时,它将默认继承形式ChildWindow,如果您希望它不可移动,则需要将其修改为继承自ImmovableChildWindow(更改基本类型)代码隐藏和xaml中的根标记名称。

ChildWindow将事件附加到FrameWorkElement,名称为“Chrome”,可以移动子窗口。然而,如果它找不到名为“Chrome”的FrameworkElement,那么它是一个表现良好的模板化控件,它只会在没有该功能的情况下继续工作。

答案 1 :(得分:1)

不需要创建新类,而是

  1. 复制样式:http://msdn.microsoft.com/en-us/library/dd833070%28VS.95%29.aspx
  2. 提供x:key="stylename"
  3. Childwindow的Construtor中,在InitializeComponent之前粘贴以下代码:

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

  4. 以上解决方案解决了我的问题

答案 2 :(得分:0)

也许你可以尝试这种简单的方法来做到这一点: 创建一个Grid来扭曲ChildWindow中的所有内容。

<Grid Margin="0">

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

</Grid>

由于网格的边距为0,因此无法单击并移动它。