Как использовать всю ширину экрана при привязке динамических значений в универсальном приложении Windows

Я пытаюсь динамически заполнять переключатели в универсальном приложении Windows. Я уже написал VisualState для разных экранов. Теперь я пытаюсь заполнить переключатель, который должен занимать всю ширину окна. Я могу установить фиксированную ширину для каждого VisualState. Но я думаю, что это может быть не очень хорошей практикой, и с этим будет сложно справиться дальше. В большой вкладке радиокнопки заполняются следующим образом

 <GridView Grid.Row="1" Height="auto" Width="auto" HorizontalAlignment="Stretch" ItemsSource="{Binding DamageLocationList}">
                            <GridView.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <VariableSizedWrapGrid Orientation="Horizontal" />
                                </ItemsPanelTemplate>
                            </GridView.ItemsPanel>
                            <GridView.ItemTemplate>
                                <DataTemplate x:DataType="model:DamageLocations">
                                <Grid>
                                     <RadioButton Style="{StaticResource ButtonRadioButtonStyle}"  HorizontalContentAlignment="Center" HorizontalAlignment="Stretch" IsChecked="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}"  Content="{Binding DamageLocation}"   Margin="0" Click="RadioButton_Checked"  />
                                </Grid>
                                </DataTemplate>
                            </GridView.ItemTemplate>
                        </GridView>

person Dino    schedule 04.04.2016    source источник
comment
Вы можете попробовать с униформой один раз ??   -  person Ashok Rathod    schedule 05.04.2016
comment
юниформегрид не существует в UWP. спасибо   -  person Dino    schedule 05.04.2016
comment
хорошо, спасибо, что поделились информацией.   -  person Ashok Rathod    schedule 05.04.2016
comment
Фиксировано ли количество элементов в вашем GridView? Всегда ли он будет состоять из шести предметов?   -  person Jay Zuo    schedule 05.04.2016
comment
Нет, может варьироваться. Я использую Enum для этого. Я получил такую ​​длину, как эта var headerCount = Enum.GetNames(typeof(DamageLocation)).Length   -  person Dino    schedule 05.04.2016


Ответы (1)


Как сказал @Ashok Rathod, вы можете попробовать использовать UniformGrid в качестве ItemsPanel вашего Grid, чтобы ваши переключатели занимали всю ширину окна вашего приложения.

Хотя UniformGrid не существует в UWP. Но мы можем реализовать его самостоятельно или использовать сторонние UniformGrid как в WinRTXamlToolkit.

Например, используя WinRTXamlToolkit, мы можем использовать

<toolkit:UniformGrid Rows="1" />

вместо

<VariableSizedWrapGrid Orientation="Horizontal" />

Здесь toolkit — это пространство имен WinRTXamlToolkit.Controls:

xmlns:toolkit="using:WinRTXamlToolkit.Controls"                             

Поскольку я не устанавливал свойство Columns, это будет значение по умолчанию, равное 0. Нулевое (0) значение свойства Columns указывает, что количество столбцов вычисляется на основе количества строк и количества видимых дочерних элементов в сетке. Поскольку я установил Rows на 1, все элементы будут помещены в один ряд и будут иметь одинаковую ширину.

После этого вам также может понадобиться установить ItemContainerStyle, чтобы радиокнопки растягивались, например:

<GridView.ItemContainerStyle>
    <Style TargetType="GridViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</GridView.ItemContainerStyle>
person Jay Zuo    schedule 05.04.2016