子窗口內的內容會發生變化,這會導致我的子窗口失去中心對齊....內容發生更改後,無論如何都需要將子窗口重新定位到中心位置......我嘗試以下,並沒有奏效:Silverlight:將子窗口重置爲中心
this.horizontalalignment = horizontalalignment.center;
this.verticalalignment = verticalalignment.center;
感謝
子窗口內的內容會發生變化,這會導致我的子窗口失去中心對齊....內容發生更改後,無論如何都需要將子窗口重新定位到中心位置......我嘗試以下,並沒有奏效:Silverlight:將子窗口重置爲中心
this.horizontalalignment = horizontalalignment.center;
this.verticalalignment = verticalalignment.center;
感謝
一個的RenderTransform對ChildWindow模板的存在似乎是罪魁禍首。 TransformGroup是默認模板的一部分,允許您在窗口中移動。
這裏是重置更改佈局後變換一個黑客:
//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已更改,以查看是否確實需要清除變換。
這解決了我的問題,'它只是工作'。我建議人們添加一些空引用檢查,但除此之外,它只是工作。 –
代碼
public partial class DialogOptions : ChildWindow
{
public DialogOptions()
{
InitializeComponent();
Loaded += (sender, args) =>
{
VerticalAlignment = VerticalAlignment.Top;
this.SetWindowPosition(new Point(0, 200));
};
}
}
或延長:
public static void SetWindowPosition(this ChildWindow childWindow, Point point)
{
var root = VisualTreeHelper.GetChild(childWindow, 0) as FrameworkElement;
if (root == null)
{
return;
}
var contentRoot = root.FindName("ContentRoot") as FrameworkElement;
if (contentRoot == null)
{
return;
}
var group = contentRoot.RenderTransform as TransformGroup;
if (group == null)
{
return;
}
TranslateTransform translateTransform = null;
foreach (var transform in group.Children.OfType<TranslateTransform>())
{
translateTransform = transform;
}
if (translateTransform == null)
{
return;
}
translateTransform.X = point.X;
translateTransform.Y = point.Y;
}
您通過高度和寬度屬性改變ChildWindow的大小? – AnthonyWJones