c# - Silverlight:将子窗口重新定位到中心

标签 c# silverlight

子窗口内的内容发生变化,这导致我的子窗口失去了居中对齐...。内容发生变化后,无论如何都可以将子窗口重新定位到中心...我尝试了以下操作,它做到了不工作:

this.horizontalalignment = horizontalalignment.center;
this.verticalalignment = verticalalignment.center;

谢谢

最佳答案

ChildWindow 模板上的 RenderTransform 似乎是罪魁祸首。 TransformGroup 是默认模板的一部分,允许您在窗口中移动。

这是在更改布局后重置转换的 hack:

        //after you do some change to the childwindow layout
        sp.Children.Add(new Button() { Content = "a" });

        Dispatcher.BeginInvoke(() =>
        {
            //reset the transform to zero
            (this.GetTemplateChild("ContentRoot") as Grid).RenderTransform = new TransformGroup()
            {
                Children = { new ScaleTransform(), new SkewTransform(), new RotateTransform(), new TranslateTransform() }
            };
        }); 

或更自动地:

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        var contentRoot = this.GetTemplateChild("ContentRoot") as FrameworkElement;
        contentRoot.LayoutUpdated += contentRoot_LayoutUpdated;
    }

    void contentRoot_LayoutUpdated(object sender, EventArgs e)
    {
        var contentRoot = this.GetTemplateChild("ContentRoot") as FrameworkElement;
        var tg = contentRoot.RenderTransform as TransformGroup;
        var tts = tg.Children.OfType<TranslateTransform>();
        foreach (var t in tts)
        {
            t.X = 0; t.Y = 0;
        }
    }

LayoutUpdated 经常被调用,因此您可能需要检查 contentRoot.ActualWidth 和 ActualHeight 是否已更改,以查看您是否真的需要清除转换。

关于c# - Silverlight:将子窗口重新定位到中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7326692/

相关文章:

c# - 如何让 SourceAFIS 在 Ubuntu 上运行?

c# - 注册使用 VS C# 2010 创建的 COM 对象

javascript - 如何通过 javascript 从 silverlight 媒体播放器 (player.xap) 获取播放状态?

c# - 调试 NavigationService.GoBack() 问题的最佳方法?

wpf - 您如何学习 WPF 和 Silverlight?

c# - 如何从 WP7/Silverlight 上的数据流中分割大图像(10 000 x 10 000 及更大)

JavaScript 方法调用只能使用 ScriptManager 调用一次

c# - 使用 ColorMatrix 将图像转换为单色

c# - 如何更改 RichTextBox 的部分文本颜色

.net - 在数据库中保存格式化文本的有意义的格式是什么?