Размер панели стека XAML UWP относительно размера экрана

Я создаю приложение UWP, которое отображает данные о погоде. В настоящее время я работаю над dataTemplate, который используется в сводной таблице

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

Также возможно ли использовать изображение в качестве фона для каждой панели стека или отображать его рядом с данными, когда я получаю Error: "The property 'VisualTree' is set more than once"?

Я проверил все другие сообщения по этому поводу, но пока не могу найти решение

<Page
x:Class="WeatherForecast.WeatherPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:WeatherForecast"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.Resources>
    <DataTemplate x:Name="ListViewDataTemplate"  >

        <Grid HorizontalAlignment="Stretch" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="8*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Grid BorderBrush="Black" BorderThickness="2" Margin="2" HorizontalAlignment="Stretch" Background="DeepSkyBlue" Grid.Column="1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <Image Source="{Binding icon}" Stretch="Fill" Height="100" Width="150" Margin="20" Grid.Column="1"/>

                <StackPanel VerticalAlignment="Center">
                    <StackPanel Orientation="Horizontal"  >
                        <TextBlock HorizontalAlignment="Stretch" FontWeight="Bold" Text="Temperature: " ></TextBlock>
                        <TextBlock  HorizontalAlignment="Stretch" Text="{Binding temp}"></TextBlock>

                    </StackPanel>

                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="Time : " FontWeight="Bold"></TextBlock>
                        <TextBlock Text="{Binding dtime}"></TextBlock>
                    </StackPanel>

                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="Description : " FontWeight="Bold"></TextBlock>
                        <TextBlock Text="{Binding desc}"></TextBlock>
                    </StackPanel>

                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="Humidity : " FontWeight="Bold"></TextBlock>
                        <TextBlock Text="{Binding humidity}"></TextBlock>
                    </StackPanel>

                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="Windspeed : " FontWeight="Bold"></TextBlock>
                        <TextBlock Text="{Binding windSpeed}"></TextBlock>
                    </StackPanel>
                </StackPanel>
            </Grid>
        </Grid>

    </DataTemplate>
</Page.Resources>

<Grid Background="LightBlue">
    <TextBlock x:Name="cityBox" HorizontalAlignment="Center" FontSize="50"  ></TextBlock>
    <Button
        x:Name="ReturnToMain" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,10" BorderThickness="1,1,1,1" FontSize="48" Background="#33B40C0C" BorderBrush="#FFF50B0B" FontFamily="Bauhaus 93" FontWeight="Bold" AutomationProperties.HelpText="Click to return to main" Click="ReturnToMain_Click" >Return To Main</Button>
    <Pivot x:Name="pvtWeather"  HorizontalContentAlignment="Stretch" Margin="100,100,100,100" Height="500" Background="LightBlue"  Foreground="LightPink"     >

    </Pivot>

</Grid>

    foreach (var day in myForecast.SortedDays)
        {
            var weathers = new ObservableCollection<WeatherController>();
            foreach (var weatherItem in day)
            {
                weathers.Add(weatherItem);
            }

            var pivotItem = new PivotItem
            {
                Header = myForecast.SortedDays[index++][0].dayOfWeek
            };
            ListView listView = new ListView
            {
                ItemsSource = weathers
            };
            pivotItem.Content = listView;
            listView.ItemTemplate = ListViewDataTemplate;
            pvtWeather.Items.Add(pivotItem);


        }

what i currently have enter image description here What I am trying to achieve enter image description here


person MidnightP    schedule 22.03.2018    source источник


Ответы (1)


Вы слишком сильно полагаетесь на использование только StackPanel для вашего макета. Если вы хотите сделать относительный размер, вам понадобится либо конвертер, либо привязка с помощью вспомогательных средств, таких как FrameworkExtensions в наборе инструментов сообщества UWP.

ИЛИ вы можете использовать сетки немного больше, чтобы использовать размер их столбцов:

<Pivot>
        <PivotItem Header="Thursday">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="8*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid BorderBrush="Black" BorderThickness="2" Margin="2" HorizontalAlignment="Stretch" Background="DeepSkyBlue" Grid.Column="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Image Source="http://unsplash.it/g/100/150" Stretch="Fill" Height="100" Width="150" Margin="20" Grid.Column="1"/>

                    <StackPanel VerticalAlignment="Center">
                        <StackPanel Orientation="Horizontal"  >
                            <TextBlock HorizontalAlignment="Stretch" FontWeight="Bold" Text="Temperature: " ></TextBlock>
                            <TextBlock  HorizontalAlignment="Stretch" Text="{Binding temp}"></TextBlock>

                        </StackPanel>

                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Time : " FontWeight="Bold"></TextBlock>
                            <TextBlock Text="{Binding dtime}"></TextBlock>
                        </StackPanel>

                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Description : " FontWeight="Bold"></TextBlock>
                            <TextBlock Text="{Binding desc}"></TextBlock>
                        </StackPanel>

                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Humidity : " FontWeight="Bold"></TextBlock>
                            <TextBlock Text="{Binding humidity}"></TextBlock>
                        </StackPanel>

                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Windspeed : " FontWeight="Bold"></TextBlock>
                            <TextBlock Text="{Binding windSpeed}"></TextBlock>
                        </StackPanel>
                    </StackPanel>
                </Grid>
            </Grid>
        </PivotItem>
    </Pivot>

В приведенном выше примере изображение также помещается в сторону, а средняя область занимает 80% ширины поворота.

Немного сложно помочь без дополнительной информации о настроенной вами комбинации list / pivot.

person Michael Hawker - MSFT    schedule 22.03.2018
comment
Спасибо @Micheal. Я реализовал это, но этот размер ярко-синих полей или шаблонов данных по-прежнему зависит только от размера текста и изображения, может быть проблема с тем, как я заполняю сводные точки в C #. Я обновил сообщение, чтобы отразить это - person MidnightP; 27.03.2018
comment
@MidnightP не могли бы вы обновить снимок экрана тем, что у вас есть сейчас, и добавить еще один из того, что вы пытаетесь выполнить? - person Michael Hawker - MSFT; 27.03.2018
comment
Я обновил сообщение, чтобы показать примерное представление о том, чего я пытаюсь достичь - person MidnightP; 27.03.2018