VerticalAlignment в WrapPanel - Как заставить его работать правильно? - PullRequest
2 голосов
/ 27 апреля 2011

У меня странная проблема.

Здесь ситуация. У меня есть ListView с пользовательским определенным GroupStyle, чтобы данные отображались в Expander с, в котором есть WrapPanel, содержащий StackPanels (который содержит один ToggleButton + один пользовательский элемент управления) Пользовательский элемент управления в StackPanel не отображается по умолчанию и становится видимым, когда установлен флажок ToggleButton. Однако, когда я проверяю ToggleButton, появляется пользовательский элемент управления, и все остальные элементы управления, расположенные на той же строке, перемещаются в вертикальный центр. В идеале я хотел бы, чтобы эти другие участники оставались на вершине. Я пытался установить VerticalAlignment="Top" везде, где мог, он все равно не меняется.

Проблема с изображением:

Исходное состояние расширителя:

Expander before

После нажатия ToggleButton происходит следующее:

Expander after

Как видите, кнопка «Анализ теста» перемещена, чтобы остаться в центре. Я хочу, чтобы он оставался в том же месте, что и оригинал.

Более того, я определил все эти стили в отдельных DataTemplate объектах. Вот небольшой код (я только что удалил то, что здесь бесполезно для проблемы, не заставит вас читать тонны XAML-кода :)):

Свойство содержимого модуля расширения:

<Expander.Content>
    <WrapPanel Background="White" VerticalAlignment="Top">
        <ItemsPresenter VerticalAlignment="Top"/>
    </WrapPanel>
</Expander.Content>

Список ItemsPanel:

<ItemsPanelTemplate >
    <WrapPanel 
         Width="{Binding (FrameworkElement.ActualWidth),
         RelativeSource={RelativeSource 
                         AncestorType=Expander}}"
         ItemWidth="{Binding (ListView.View).ItemWidth,
         RelativeSource={RelativeSource AncestorType=ListView}}"

         ItemHeight="{Binding (ListView.View).ItemHeight,
         RelativeSource={RelativeSource AncestorType=ListView}}" />
</ItemsPanelTemplate>

Список ItemsTemplate:

<StackPanel Orientation="Vertical" Height="Auto" Width="Auto" VerticalAlignment="Top" >
    <ToggleButton BorderBrush="{x:Null}" Background="{x:Null}" IsChecked="{Binding Value.IsToLaunch, Mode=TwoWay}"
              Command="{Binding DataContext.UpdateGroupCheckingsCommand,
                                RelativeSource={RelativeSource FindAncestor,
                                AncestorType={x:Type UserControl}}}">
        <Grid Background="Transparent">
            <!-- Blah blah blah about the ToggleButton's content -->

        </Grid>
    </ToggleButton>

    <my:UcReleaseChooser>
        <!-- Blah blah blah about being visible if ToggleButton is Checked -->
    </my:UcReleaseChooser>
</StackPanel>

1 Ответ

5 голосов
/ 27 апреля 2011

Попробуйте установить для свойства verticalalignment значение Top или для свойства VerticalContentAlignment представления списка значение Stretch

   <Style TargetType="ListView">
        <Setter Property="VerticalContentAlignment" Value="Top"/>
    </Style>

или

    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="VerticalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.ItemContainerStyle>
...