2010-03-15 44 views

Trả lời

34

Bạn chỉ cần sử dụng các thuộc tính Window.LeftWindow.Top. Đọc chúng từ cửa sổ chính của bạn và gán các giá trị (cộng 20 px hoặc bất kỳ thứ gì) cho AboutBox trước gọi phương thức ShowDialog().

AboutBox dialog = new AboutBox(); 
dialog.Top = mainWindow.Top + 20; 

Để căn giữa, bạn cũng có thể chỉ cần sử dụng thuộc tính WindowStartupLocation. Thiết lập này để WindowStartupLocation.CenterOwner

AboutBox dialog = new AboutBox(); 
dialog.Owner = Application.Current.MainWindow; // We must also set the owner for this to work. 
dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner; 

Nếu bạn muốn nó được tập trung theo chiều ngang, nhưng không phải theo chiều dọc (tức là cố định thẳng đứng vị trí), bạn sẽ phải làm điều đó trong một EventHandler sau AboutBox đã được nạp bởi vì bạn sẽ cần phải tính toán vị trí nằm ngang phụ thuộc vào chiều rộng của AboutBox, và điều này chỉ được biết sau khi nó đã được nạp.

protected override void OnInitialized(...) 
{ 
    this.Left = this.Owner.Left + (this.Owner.Width - this.ActualWidth)/2; 
    this.Top = this.Owner.Top + 20; 
} 

gehho.

+0

Cảm ơn bạn gehho. – empo

+0

sẽ làm việc này cho DataGridCell (bên trong DataGrid wpf4)) quá? rõ ràng là không. – neebz

+0

@nEEbz: Ý của bạn là gì? Bạn có muốn di chuyển một 'DataGridCell' liên quan đến cửa sổ chính không ?? Tôi không hiểu mối quan hệ với câu hỏi ban đầu. Xin hãy giải thích. – gehho

2

tôi sẽ đi theo con đường dẫn sử dụng, thay vì đếm trên WPF để làm cho việc tính toán cho tôi ..

System.Windows.Point positionFromScreen = this.ABC.PointToScreen(new System.Windows.Point(0, 0)); 
PresentationSource source = PresentationSource.FromVisual(this); 
System.Windows.Point targetPoints = source.CompositionTarget.TransformFromDevice.Transform(positionFromScreen); 

AboutBox.Top = targetPoints.Y - this.ABC.ActualHeight + 15; 
AboutBox.Left = targetPoints.X - 55; 

đâu ABC là một số UIElement trong cửa sổ cha mẹ (có thể là Chủ đầu tư nếu bạn thích ..) , Và cũng có thể là cửa sổ chính nó (trên cùng bên trái) ..

Chúc may mắn

+1

Giải pháp tuyệt vời !!! – VibeeshanRC

Các vấn đề liên quan