2011-05-29 26 views
5

我使用Popup控件,出於某種原因,其垂直對齊方式無法正常工作。這是XAML我:彈出控件VerticalAlignment不「捕捉」

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

我預計該彈出窗口的寬度是100像素,同樣作爲它的父網格。 但是,彈出窗口中的按鈕的行爲就好像它的Horizo​​ntalAlignment是Left的,即按鈕的寬度足以允許其中的單詞「Hello」,並且我無法弄清楚爲什麼,或者如何使它具有與包含網格相同的寬度。

謝謝!

回答

9

不幸的是,Popup不是與XAML中定義它的其餘元素相同的可視化樹的一部分。這實際上是一個新窗口,雖然是一個非常簡單,通常是小窗口。

換句話說,Popup並不真正參與主窗口的佈局。所以改變像HorizontalAlignment這樣的東西沒有效果,因爲該屬性控制了佈局的位置和大小,這個元素相對於它的包含元素。

這個「孤立元素」問題在處理Popup時不會引起問題。儘管如此,還有一些工具和技術可以解決作爲單獨窗口介紹的所有問題。

我可以給出的第一個建議是瞭解放置屬性PlacementTargetPlacement。您可以使用這些屬性來定位Popup。您還可以使用數據綁定的ElementName語法來處理大小。

這裏是在您的情況使用這些技術的一個例子:

<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

在Windows Phone的Silverlight:*不能解析符號 '安置' *。這個問題是專門針對Silverlight的。 – 2014-09-11 13:02:26

+0

Windows Phone 8.1的問題相同 – Sergey 2015-02-09 18:32:46