【问题标题】:Silverlight - preventing ChildWindow movementSilverlight - 防止 ChildWindow 移动
【发布时间】:2010-04-20 10:41:55
【问题描述】:

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

谢谢, 标记

【问题讨论】:

    标签: silverlight silverlight-3.0 childwindow


    【解决方案1】:

    我不确定你是否会称其为整洁,但...

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

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

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

    【讨论】:

      【解决方案2】:

      不需要创建新类,而是

      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;

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

      【讨论】:

        【解决方案3】:

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

        <Grid Margin="0">
        
        <!--Your ChildWindow. Canvas, Grid, Textblock...Whatever-->
        
        </Grid>
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多