WrapPanel中的VerticalAlignment - 如何使其正常工作?

时间:2011-04-27 09:46:22

标签: wpf wpf-controls datatemplate vertical-alignment wrappanel

我有一个奇怪的问题。

情况如下。我有一个ListView,其中包含自定义的GroupStyle,可以使数据显示在Expander中,其中WrapPanel包含StackPanels(其中包含一个StackPanel ToggleButton +一个自定义控件) 默认情况下,ToggleButton中的自定义控件不可见,并且在选中ToggleButton时变为可见。 但是,当我检查VerticalAlignment="Top"时,会出现自定义控件,位于同一行的所有其他控件将移动到垂直中心。 理想情况下,我希望其他成员能够保持领先地位。我试图尽可能地设置ToggleButton,无论如何都不会改变。

成像问题:

扩展器的初始状态:

Expander before

点击DataTemplate后,会发生以下情况:

Expander after

如您所见,“测试分析​​”按钮移动到中心位置。我希望它与原版保持在同一个地方。

此外,我已在单独的<Expander.Content> <WrapPanel Background="White" VerticalAlignment="Top"> <ItemsPresenter VerticalAlignment="Top"/> </WrapPanel> </Expander.Content> 对象中定义了所有这些样式。 这里有一些轻量代码(我刚刚删除了这里的问题无用,不会让你阅读大量的XAML代码:)):

扩展器的内容属性:

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

1 个答案:

答案 0 :(得分:5)

尝试将verticalalignment属性设置为Top,或将listview的VerticalContentAlignment属性设置为Stretch

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

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