如何在页面上居中弹出控件

时间:2013-10-12 17:46:07

标签: xaml windows-phone-7 windows-phone-8 popup

我正在使用以下Popup,默认情况下位于屏幕的左上角。我希望能够在我的视图中居中,这样我就可以将它拉伸到屏幕的宽度和高度,并改变不透明度。我希望用户能够看到弹出窗口显示在屏幕后面的内容,但弹出窗口也包含所有内容。我到目前为止的内容如下

<Grid x:Name="filterGrid">
                <Popup x:Name="trialPopup" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="0.5">
                    <Border Margin="3" BorderBrush="{StaticResource PhoneForegroundBrush}">
                            <StackPanel Background="#FF1BA1E2">
                            <TextBlock x:Name="modeTextBlock" HorizontalAlignment="Center"/>
                            <TextBlock Text="Do you wish to purchase the application?" TextWrapping="Wrap" HorizontalAlignment="Center"/>
                                <Grid Margin="0,10" >
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width=".5*"/>
                                    <ColumnDefinition Width=".5*"/>
                                </Grid.ColumnDefinitions>
                                    <Button x:Name="purchaseButton" Grid.Column="0" Content="purchase" Click="popupButton_Click"/>
                                    <Button x:Name="cancelButton" Grid.Column="1" Content="cancel" Click="popupButton_Click"/>
                                </Grid>
                            </StackPanel>
                    </Border>
                </Popup>
            </Grid>

每当我尝试在Width="Center"元素中设置Height="Center"Popup时,如下所示

<Popup x:Name="trialPopup" HorizontalAlignment="Center" VerticalAlignment="Center">

左上角是居中的,因此弹出窗口不在控件本身的中间。有没有办法根据弹出的宽度和高度以及页面宽度和高度计算合适的尺寸并相应地应用它?或者有没有办法在XAML中正确执行此操作?另外,不设置不透明度值?

2 个答案:

答案 0 :(得分:1)

页面中心:

<Popup PlacementTarget="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}" Placement="Center" />

窗口中心:

<Popup PlacementTarget="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" Placement="Center" />

答案 1 :(得分:0)

尝试使用Popup的偏移属性:

trialPopup.VerticalOffset = - ((FrameworkElement)trialPopup.Child).ActualHeight / 2;
trialPopup.HorizontalOffset = -((FrameworkElement)trialPopup.Child).ActualWidth / 2;

Opacity将在为Popup.Child设置时有效,但我不知道为什么它不适用于Popup。