2011-05-29 22 views
5

Tôi đang sử dụng điều khiển Popup và vì một số lý do, căn chỉnh theo chiều dọc của nó không hoạt động như tôi mong đợi. Đây là XAML tôi có:Điều khiển bật lên VerticalAlignment không "bắt"

<Grid Width="100" Height="30" > 
     <TextBox Text="Hello" /> 
     <Popup IsOpen="True" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" > 
      <Button Content="Hello" /> 
     </Popup> 
    </Grid> 

Tôi mong rằng chiều rộng của cửa sổ bật lên sẽ là 100px, giống như lưới mẹ của nó. Tuy nhiên, nút bên trong cửa sổ bật lên giống như HorizontalAlignment của nó là Trái, nghĩa là chiều rộng của nút chỉ đủ để cho phép từ "Hello" bên trong nó, và tôi không thể hiểu tại sao, hoặc làm sao cùng chiều rộng với lưới chứa.

Cảm ơn!

Trả lời

9

Thật không may, một Popup không phải là một phần của cùng một cây thị giác như phần còn lại của các phần tử trong XAML mà nó được xác định. Đó là nghĩa là một cửa sổ mới, mặc dù một cửa sổ rất đơn giản và thường nhỏ.

Đặt một cách khác, Popup không thực sự tham gia vào bố cục của cửa sổ chính. Vì vậy, việc thay đổi những thứ như HorizontalAlignment không có tác dụng vì thuộc tính đó kiểm soát cách bố trí bố cục và kích thước phần tử này liên quan đến phần tử chứa của nó.

Sự cố "yếu tố mồ côi" này không gây ra sự cố khi xử lý Popup. Tuy nhiên, có những công cụ và kỹ thuật để giải quyết tất cả các vấn đề mà là một cửa sổ riêng biệt giới thiệu.

Đề xuất đầu tiên tôi có thể cung cấp là hiểu thuộc tính vị trí, PlacementTargetPlacement. Bạn có thể sử dụng các thuộc tính này để định vị số Popup. Bạn cũng có thể sử dụng cú pháp ElementName của databinding để quản lý kích thước.

Dưới đây là một ví dụ của việc sử dụng những kỹ thuật này trong tình huống của bạn:

<Grid Name="grid" Width="100" Height="30" > 
    <TextBox Text="Hello" /> 
    <Popup IsOpen="True" 
      Placement="Bottom" 
      PlacementTarget="{Binding ElementName=grid}" 
      Width="{Binding ActualWidth, ElementName=grid}"> 
     <Button Content="Hello" /> 
    </Popup> 
</Grid> 
+0

Trên Windows Phone Silverlight: * không thể giải quyết biểu tượng 'Vị trí' *. Câu hỏi này dành riêng cho Silverlight. –

+0

Vấn đề tương tự đối với Windows Phone 8.1 – Sergey

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