Windows Phone 7 - 如何在大于屏幕的滚动查看器中居中弹出窗口?

时间:2011-02-06 02:38:43

标签: windows-phone-7 textbox popup center scrollviewer

我希望有人可以帮助应该成为一个非常简单的问题来解决...我已经花了好几个小时,这只会让我发疯!

在我的Silverlight WP7应用程序中,我有一个600x600的ScrollViewer控件,向左偏移60个像素(水平居中),在此我有许多图像叠加在一起(参见下面的代码)。

我还定义了一个Popup控件,当图像从网上下载时会弹出,但我不能让PopUp居中 - 更糟糕的是,即使我已经指定了它,它内部的文本也永远不会居中无论我尝试什么,始终都是合理的。

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
            <RowDefinition Height="600"/>
            <RowDefinition Height="50"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <ScrollViewer Grid.Row="1" Margin="-60,0,0,0" Height="600" Width="600" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">            
            <Grid x:Name="RadarImages" Margin="0,0,0,0">            
                <Image Height="600" Margin="0,0,0,0" HorizontalAlignment="Left" Name="imgBack" Stretch="Fill" VerticalAlignment="Top" Width="600" Opacity="100" />
                <Image Height="600" Margin="0,0,0,0" HorizontalAlignment="Left" Name="imgObs" Stretch="Fill" VerticalAlignment="Top" Width="600" Opacity="100"  />
                <Image Height="600" Margin="0,0,0,0" HorizontalAlignment="Left" Name="imgLoop" Stretch="Fill" VerticalAlignment="Top" Width="600" Opacity="100"  />
                <Popup x:Name="StatusPopup" Margin="-200,-100,0,0" HorizontalAlignment="Center" VerticalAlignment="Center">
                    <TextBox Text="...loading..." Width="200" Height="60" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Black" Foreground="White" BorderBrush="White" BorderThickness="3" />
                </Popup>
            </Grid>
        </ScrollViewer>

   </Grid> 

我尝试在弹出窗口中添加一个Grid来明确控制布局,但没有任何乐趣:darned PopUp不会居中在屏幕上,而且里面的文字也不会。

有人可以建议我需要做些什么来解决这个问题吗?

... TIA

麦克

1 个答案:

答案 0 :(得分:1)

我设法使用以下XAML获取Popup内容(我添加了几个固定的背景颜色以显示不同元素的位置):

<Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
            <RowDefinition Height="600"/>
            <RowDefinition Height="50"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <ScrollViewer Grid.Row="1" Margin="-60,0,0,0" Height="600" Width="600" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">            
            <Grid x:Name="RadarImages" Background="AliceBlue" Margin="0,0,0,0">            
                <Image Height="600" Margin="0,0,0,0" HorizontalAlignment="Left" Name="imgBack" Stretch="Fill" VerticalAlignment="Top" Width="600" Opacity="1" />
                <Image Height="600" Margin="0,0,0,0" HorizontalAlignment="Left" Name="imgObs" Stretch="Fill" VerticalAlignment="Top" Width="600" Opacity="1"  />
                <Image Height="600" Margin="0,0,0,0" HorizontalAlignment="Left" Name="imgLoop" Stretch="Fill" VerticalAlignment="Top" Width="600" Opacity="1"  />
                <Popup x:Name="StatusPopup" IsOpen="True">
                    <Border Background="Red" Height="768" Margin="60,0" Width="480">
                        <TextBox Text="...loading..." HorizontalAlignment="Center" VerticalAlignment="Center" Background="Black" Foreground="White" BorderBrush="White" BorderThickness="3" />
                    </Border>
                </Popup>
            </Grid>
        </ScrollViewer>

   </Grid>

基本上,您不能将Popup本身用于位置或对齐,而是必须使用Popup内的根元素。

另一件事:Opacity的有效值范围是0到1,而不是100。