0

有人有任何巧妙的解决方案来防止 Silverlight ChildWindow 被移动吗?

谢谢,马克

4

3 回答 3

1

不需要创建新课程,而是

  1. 从以下位置复制样式:http: //msdn.microsoft.com/en-us/library/dd833070%28VS.95%29.aspx

  2. x:key="stylename"

  3. 在 的构造函数中Childwindow,在前面粘贴以下代码InitializeComponent

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

上述解决方案解决了我的问题

于 2011-12-06T13:34:09.930 回答
1

我不确定你会称之为整洁,但...

  • 为自己创建一个新的模板化控件并调用它ImmovableChildWindow
  • 将其继承的类修改为ChildWindow.
  • 打开 Themes/generic.xaml 你会发现一个初始样式ImmoveableChildWindow
  • 在 Silverlight 文档中,您将在ChildWindow Styles and Templates找到 ChildWindow 的现有模板。
  • ImmovableChildWindow请注意样式的现有 TargetType 值。
  • 从文档中复制“n”将 ChildWindow 的整个默认样式粘贴到您的主题/generic.xaml 文件中。
  • 将此副本替换TargetType为与现有ImmovaleChildWindow样式相同的值。
  • 您现在可以删除初始样式。现在只保留 ChildWindow 样式的大副本ImmovableChildWindow
  • Templatesetter 中查找将 of 更改TargetType为与样式相同的值TargetType
  • 搜索模板并找到Border名称为Chrome的。删除x:Name="Chrome"属性。(这是我们真正追求的)。

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

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

于 2010-04-20T18:46:23.180 回答
0

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

<Grid Margin="0">

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

</Grid>

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

于 2011-03-15T15:09:11.857 回答