Windows Phone 7 - как центрировать всплывающее окно в окне прокрутки больше экрана? - PullRequest
2 голосов
/ 06 февраля 2011

Я надеюсь, что кто-то может помочь с тем, что должно быть очень простой проблемой для решения ... Я потратил часы на это, и это просто сводит меня с ума!

В моем приложении Silverlight WP7 у меня есть элемент управления ScrollViewer с размером 600x600 и смещением влево на 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 внутри всплывающего окна, чтобы без всякого удовольствия явно управлять макетом: проклятый PopUp просто не будет центрироваться на экране, а текст внутри тоже не будет.

Кто-нибудь может подсказать, что мне нужно сделать, чтобы это исправить?

ТИА ...

Mike

1 Ответ

1 голос
/ 06 февраля 2011

Мне удалось получить контент Popup, используя следующий XAML (я добавил пару фиксированных цветов фона, чтобы показать, где находятся разные элементы):

<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.

...