【发布时间】:2014-09-23 10:32:52
【问题描述】:
我们遇到了一个关于在 WPF 中正确使用 SizeToContent=WidthandHeight 和 WindowStartupLocation=CenterScreen 的问题。调整大小后,我们的窗口有奇怪的黑色边框,并且不在中心。
【问题讨论】:
标签: c# wpf sizetocontent
我们遇到了一个关于在 WPF 中正确使用 SizeToContent=WidthandHeight 和 WindowStartupLocation=CenterScreen 的问题。调整大小后,我们的窗口有奇怪的黑色边框,并且不在中心。
【问题讨论】:
标签: c# wpf sizetocontent
我们已经用这个类解决了它。 所以你应该使用它而不是普通的Window
public class CustomizableChromeWindow : Window, INotifyPropertyChanged
{
protected override void OnStateChanged(EventArgs e)
{
base.OnStateChanged(e);
OnPropertyChanged("CaptionButtonMargin");
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
HandleSizeToContent();
}
private void HandleSizeToContent()
{
if (this.SizeToContent == SizeToContent.Manual)
return;
var previosTopXPosition = this.Left;
var previosTopYPosition = this.Top;
var previosWidth = this.MaxWidth;
var previosHeight = this.MaxHeight;
var previousWindowStartupLocation = this.WindowStartupLocation;
var previousSizeToContent = SizeToContent;
SizeToContent = SizeToContent.Manual;
Dispatcher.BeginInvoke(
DispatcherPriority.Loaded,
(Action)(() =>
{
this.SizeToContent = previousSizeToContent;
this.WindowStartupLocation = WindowStartupLocation.Manual;
this.Left = previosTopXPosition + (previosWidth - this.ActualWidth)/2;
this.Top = previosTopYPosition + (previosHeight - this.ActualHeight) / 2;
this.WindowStartupLocation = previousWindowStartupLocation;
}));
}
public Thickness CaptionButtonMargin
{
get
{
return new Thickness(0, 0, 0, 0);
}
}
#region INotifyPropertyChanged
private void OnPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
【讨论】:
在给出 MaxWith 和 MaxHeight 之前,该代码不起作用。 为了解决这个问题,我改用了 RestoreBounds:
var previosWidth = this.RestoreBounds.Width;
var previosHeight = this.RestoreBounds.Height;
【讨论】: