【问题标题】:Conflict in using SizeToContent=widthandHeight and WindowStartupLocation in WPF在 WPF 中使用 SizeToContent=widthandHeight 和 WindowStartupLocation 的冲突
【发布时间】:2014-09-23 10:32:52
【问题描述】:

我们遇到了一个关于在 WPF 中正确使用 SizeToContent=WidthandHeight 和 WindowStartupLocation=CenterScreen 的问题。调整大小后,我们的窗口有奇怪的黑色边框,并且不在中心。

【问题讨论】:

    标签: c# wpf sizetocontent


    【解决方案1】:

    我们已经用这个类解决了它。 所以你应该使用它而不是普通的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
            }
    

    【讨论】:

      【解决方案2】:

      在给出 MaxWith 和 MaxHeight 之前,该代码不起作用。 为了解决这个问题,我改用了 RestoreBounds:

      var previosWidth = this.RestoreBounds.Width;
      var previosHeight = this.RestoreBounds.Height;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-24
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 2011-03-11
        • 2017-03-15
        • 2021-02-24
        • 1970-01-01
        相关资源
        最近更新 更多