Кнопка выравнивания по правому краю в сетке, возможно, без содержимого - растянуть сетку, чтобы всегда заполнять страницу - PullRequest
3 голосов
/ 19 октября 2010

Я теряю терпение из-за этого. Я работаю над приложением Windows Phone 7 и не могу понять, какой диспетчер макетов использовать для достижения следующих целей:

An sketch of the desired page layout

По сути, когда я использую Grid в качестве корня макета, я не могу растянуть сетку до размера страницы приложения телефона. Когда основная область контента заполнена, все хорошо, и кнопка сидит там, где я хочу, чтобы она сидела. Однако в случае, если содержимое страницы очень короткое, сетка настолько широка, чтобы вместить его содержимое, и тогда кнопка (которую я отчаянно хочу держать возле правого края экрана) отходит от правого края.

Если я заменю сетку и использую вертикально ориентированную панель стека для корня макета, кнопка будет расположена там, где я хочу, но тогда область контента сможет вырасти за нижний край. Поэтому, когда я помещаю список, полный элементов, в основную область содержимого, он не регулирует свою высоту, чтобы он был полностью виден, но большинство элементов в этом списке просто отображаются ниже нижнего края области отображения.

Я попытался использовать сторонний менеджер макета DockPanel, а затем закрепил кнопку в ее верхнем разделе и установил HorizontalAlignment="Right" кнопки, но результат был таким же, как с сеткой, он также уменьшается в размере, когда нет ' • недостаточно содержимого в области содержимого (или если заголовок короткий).

Как мне тогда это сделать?


== EDIT ==

Я попробовал XAML в WPCoder, только я заменил пустое текстовое поле на то, что было бы на реальной странице (стековая панель), и поместил список в сетку ContentPanel. Я заметил, что то, что у меня было раньше и что предлагает WPCoder, очень похоже. Вот мой текущий XAML, и страница все еще не увеличивается в соответствии с шириной страницы, и я получаю результаты, идентичные тем, что были раньше:

<phone:PhoneApplicationPage 
    x:Name="categoriesPage"
    x:Class="CatalogueBrowser.CategoriesPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="PortraitOrLandscape"  Orientation="Portrait" 
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" 
    xmlns:ctrls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
    shell:SystemTray.IsVisible="True">

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

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <StackPanel Orientation="Horizontal" VerticalAlignment="Center" >
                <TextBlock Text="Browsing:" 
                       Margin="10,10" 
                       Style="{StaticResource PhoneTextTitle3Style}" />
                <TextBlock x:Name="ListTitle" 
                       Text="{Binding DisplayName}" 
                       Margin="0,10" 
                       Style="{StaticResource PhoneTextTitle3Style}" />
            </StackPanel>
            <Button Grid.Column="1"
                    x:Name="btnRefineSearch" 
                    Content="Refine Search" 
                    Style="{StaticResource buttonBarStyle}" 
                    FontSize="14" />
        </Grid>

        <Grid x:Name="ContentPanel" Grid.Row="1">
            <ListBox x:Name="CategoryList" 
                     ItemsSource="{Binding Categories}" 
                     Style="{StaticResource CatalogueList}" 
                     SelectionChanged="CategoryList_SelectionChanged"/>
        </Grid>
    </Grid>

</phone:PhoneApplicationPage>

Вот как выглядит страница с вышеуказанной разметкой XAML в эмуляторе:

alt text

Ответы [ 3 ]

3 голосов
/ 19 октября 2010

Достигает ли это того, что вы ищете?

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <TextBox Grid.Column="0" Grid.Row="0" />
    <Button Content="Search" Grid.Column="1" Grid.Row="0" />
    <ScrollViewer Grid.Row="1" Grid.ColumnSpan="2"></ScrollViewer>
</Grid>

Протестировано в Grid с именем = "ContentPanel" на странице / проекте по умолчанию.

2 голосов
/ 19 октября 2010

Код ниже должен работать для вас.Вам просто нужно поместить контент в сетку с именем ContentPanel.Если это не работает, вам нужно опубликовать свой XAML, который не работает.

<phone:PhoneApplicationPage 
    x:Class="WindowsPhoneApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <TextBlock Text="CAPTION" VerticalAlignment="Center" />
            <Button Content="Button" Grid.Column="1" />
        </Grid>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        </Grid>
    </Grid>

</phone:PhoneApplicationPage>
1 голос
/ 19 октября 2010

Спасибо, ребята, за ваши ответы, они помогли мне найти ошибку под отдельными страницами. Для того, чтобы между страницами были приятные переходы с переворотом, я использовал стиль, скопированный из одного из примеров WP7. Этот стиль устанавливал шаблон для PhoneApplicationFrame таким образом, что VerticalAlignemnt и HorizontalAlignment, который (я считаю) по умолчанию установлен на Stretch, были переопределены, и поэтому мои страницы не были выложены так, как обычно ожидалось из-за этого специального PhoneApplicationFrame шаблон.

Так что причина всех моих головных болей лежала низко под всеми другими уровнями абстракции. Я полагался только на то, что он обеспечивает мне визуально привлекательные переходы страниц, и не мешает работать с другими аспектами приложения, но затем я посмотрел гораздо глубже, чем хотел бы, и заметил, что мне нужно установить вертикальное / горизонтальное выравнивание на растяжение. в нескольких местах, которые сразу же решили все проблемы для меня.

Приветствия: -)

...