2010-01-22 33 views
9

xem xét như sau:Lấy kích thước (sau khi đã được "streched") của một mục trong một ViewBox

Hãy nói rằng Window là 1024x768 và ViewBox lấp đầy toàn bộ cửa sổ , điều này có nghĩa là Hộp văn bản thực sự lớn trên màn hình.

Tôi muốn lấy kích thước của TextBox như hiện tại trên màn hình. Nếu tôi nhận được DesiredSize hoặc ActualSize hoặc thậm chí RenderedSize, tôi luôn nhận được 100.

Mọi đề xuất?

Cập nhật: tôi có lẽ có thể nhận được các ActualWidth của ViewBox và chia nó cho ActualWidth của nó là đứa trẻ mà sẽ cung cấp cho tôi những yếu tố quy mô hiện tại và vạch trần đó như là một tài sản nào đó nhưng tôi không chắc chắn đó là sản phẩm tốt nhất cách để làm điều đó.

+0

Bạn đã xem xét kiểm tra thuộc tính "Chiều rộng" và "Chiều cao" của TextBox chưa? – CodeMouse92

+1

@ JasonMc92 - Điều đó thực sự sẽ không giúp được gì, vì Chiều rộng & Chiều cao có thể sẽ lớn nhất. Chiều rộng và chiều cao được sử dụng để * yêu cầu * kích cỡ, không yêu cầu kích thước thực tế. –

Trả lời

17

Đây là cách bạn có được ScaleTransform các ViewBox tác động đối với trẻ em của nó:.

var child = VisualTreeHelper.GetChild(viewBox, 0) as ContainerVisual; 
var scale = child.Transform as ScaleTransform; 

Đây viewBox là ViewBox rằng textbox ngồi trong Sau đó, bạn có thể chỉ nhân scale.ScaleX * textBox.ActualWidth và bạn sẽ có được kích thước trong tọa độ Screen

Nhưng việc này còn dễ dàng hơn! Để có kích thước của hộp văn bản đó trực tiếp trong Tọa độ màn hình bạn thực hiện:

textbox.PointToScreen(new Point(textbox.ActualWidth,textbox.ActualHeight)) - textbox.PointToScreen(new Point(0,0))