2010-11-12 25 views
6

Tôi gặp sự cố lạ khi thay đổi kích thước bố cục của canvas, điều này xảy ra là ChildWindow.Thay đổi kích thước chiều cao ChildWindow khi đang di chuyển trong Silverlight gây ra hành vi lạ

Từ một mức độ cao, đây là những gì tôi đang cố gắng để làm gì khi người dùng nhấp vào một nút:

  1. Bỏ ẩn liên tiếp, bằng cách thiết lập chiều cao RowDefinition từ 0 đến một cái gì đó lớn hơn.
  2. Đổi kích thước canvas vì mọi thứ bên trong đều cao hơn.
  3. Thay đổi kích thước của bố cục canvas (ChildWindow), vì canvas cao hơn.

Bước 1 và 2 hoạt động tốt. Vấn đề là với bước 3: khi tôi bước qua mã F #/Silverlight, tất cả các kích thước dường như được đặt chính xác. Vấn đề là ChildWindow được hiển thị trên màn hình như là nhiều hơn cao hơn mức thực sự cần thiết.

Hãy xem một ví dụ dưới đây:

member this.btnWhatever_Click(sender : obj) (args : RoutedEventArgs) = 
    let parentWindow = this.Parent :?> ChildWindow // get the canvas' parent, and cast it to a ChildWindow 
    // if the RowDefinition height is set to our standard, the hide it by setting it to 0 
    if this.aRowDefinition.Height.Value.Equals STANDARD_ROW_HEIGHT then 
     this.aRowDefinition.Height <- new GridLength(0.) 
     this.Height <- this.Height - HEDGE_ROW_HEIGHT 
     parentWindow.Height <- parentWindow.Height - STANDARD_ROW_HEIGHT 
     this.btnCreateOrRemoveHedge.Content <- "On" 
    // otherwise, unhide the RowDefinition by setting it to the standard height 
    else 
     this.aRowDefinition.Height <- new GridLength(STANDARD_ROW_HEIGHT) 
     this.Height <- this.Height + STANDARD_ROW_HEIGHT 
     parentWindow.Height <- parentWindow.Height + STANDARD_ROW_HEIGHT 
     this.btnWhatever.Content <- "Off" 
    () 

Trong trường hợp này, STANDARD_ROW_HEIGHT của tôi là chỉ có 23 pixel, nhưng một không gian trống của 92 pixel đã được bổ sung vào ChildWindow bên dưới thanh tiêu đề sau người dùng nhấp vào nút. Hơn nữa, là khi người dùng nhấp vào nút một lần nữa (để chuyển đổi hiển thị hàng), hàng biến mất nhưng không gian thêm ở phía trên cùng của cửa sổ vẫn còn. Ban đầu, không gian trống này không có ở đó. Xem hình ảnh này:

alt text

Mọi suy nghĩ/trợ giúp sẽ được đánh giá cao. Cảm ơn!

Trả lời

1

Tôi không phải là chuyên gia về công cụ này, nhưng rất nhiều hiển thị/định cỡ WPF diễn ra tự động. Tôi nghĩ rằng có một mô hình hai pha, trong đó các thành phần đầu tiên được yêu cầu cho kích thước/ràng buộc ưa thích của chúng, và sau đó một lần thứ hai vượt qua đưa ra những điều được đưa ra ràng buộc thực tế. Đối với nhiều thành phần bạn không cần phải làm bất kỳ kích thước rõ ràng bởi vì chúng sẽ được tự động kích thước dựa trên kích thước của con cái của họ. Nghe có vẻ như nói chung bạn có thể tập thể dục quá tốt/kiểm soát mức độ thấp của kích thước, và nên rời WPF làm nhiều công việc cho bạn.

Để 'ẩn' một hàng, tôi đặt cược có lẽ tốt hơn để chuyển đổi thuộc tính .Visible hơn là đặt chiều cao của nó thành 0.

Nó có mùi giống như bạn đang thêm chiều cao rõ ràng cho cha mẹ, nhưng không cần phải vì WPF đã thay đổi kích thước của cha mẹ kể từ bây giờ nó giữ nội dung rõ ràng hơn. Không bao giờ đặt chiều cao của cha mẹ thành bất kỳ thứ gì, ở bất kỳ đâu, có thể sửa chữa nó.

(Đây là những gợi ngẫu nhiên từ một người sử dụng WPF không-quá-đầy đủ thông tin, vì vậy chúc may mắn :))

+0

Thật không may là RowDefinition không có IsVisible/tài sản Visible/Tầm nhìn. Ngoài ra, khi tôi ẩn tất cả các nội dung của Grid Row, nó không thay đổi kích thước xuống không có gì (hoặc ẩn chính nó). Theo như tôi có thể nói, không có thực tế "Row" đối tượng mà tôi có thể đặt các lĩnh vực hình thức của tôi vào ... Tôi phải gán Grid.Row của từng lĩnh vực cá nhân. Tôi nghĩ rằng tôi có thể phải làm lại tất cả mọi thứ và phân chia các lĩnh vực của tôi thành lưới phụ, được giấu kín. –

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