GroupBox和ListBox有问题

时间:2012-09-27 17:51:12

标签: wpf xaml

我无法正确对齐列表框的内容。我有以下XAML。基本上,我试图显示一些ListBoxes,每个ListBox都在自己的标题下。我还附上了截图。如您所见,只有具有最长TextBlock的ListBox才能正确对齐其X按钮。我试过Horizo​​ntalContentAlignment =“Stretch”,但那没用。我还仔细检查了我所包含的ListBox,ListBoxItem和GroupBox样式没有做任何奇怪的事情。我基本上删除了所有样式,问题仍然存在。有任何想法吗?我对任何想法持开放态度,包括改变我的XAML。

<ItemsControl Grid.Row="0" ItemsSource="{Binding Path=Items}">
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <GroupBox Header="{Binding Path=CategoryName}">
            <ListBox Grid.IsSharedSizeScope="True" ItemsSource="{Binding Path=Items}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="15" SharedSizeGroup="Col1"/>
                                <ColumnDefinition Width="Auto" SharedSizeGroup="Col2"/>
                                <ColumnDefinition Width="Auto" SharedSizeGroup="Col3"/>
                                <ColumnDefinition Width="11" SharedSizeGroup="Col4"/>
                            </Grid.ColumnDefinitions>

                            <Path Grid.Column="0" Visibility="{Binding Path=IsChecked, Mode=OneWay, Converter={StaticResource BooleanToVisibilityConverter}}" Stroke="{StaticResource Green06Brush}" StrokeThickness="2" SnapsToDevicePixels="False" Data="M 1 6 L 4 9 L 10 1" Margin="0.6,0.6,0.6,0.6" ClipToBounds="true" StrokeEndLineCap="Flat" StrokeStartLineCap="Flat"/>

                            <TextBlock Grid.Column="1" Text="{Binding Path=Symbol}" HorizontalAlignment="Left" Margin="2,0,10,0"/>
                            <TextBlock Grid.Column="2" Text="{Binding Path=Name}" HorizontalAlignment="Left" Margin="0,0,10,0"/>

                            <fpp:ImageButton Grid.Column="3" RenderOptions.BitmapScalingMode="NearestNeighbor" Source="Images/Clear_X.png" MouseOverSource="Images/Clear_X_On.png" DisabledSource="Images/Clear_X_Disabled.png" HorizontalAlignment="Right" VerticalAlignment="Center" Click="ClickRemoveTicker"/>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ListBox>
        </GroupBox>
    </DataTemplate>
</ItemsControl.ItemTemplate>

原始屏幕截图

Original Screenshot

更新了ScreenShot

enter image description here

1 个答案:

答案 0 :(得分:0)

问题是每个Grid都包含在一个项容器中,并且该容器只会增加其内容的大小。

尝试将<GroupBox Header…>元素更改为:

<GroupBox Header…
          Width="{Binding ActualWidth,
              RelativeSource={RelativeSource FindAncestor, AncestorType=ItemsControl}}">

原则上,这应该将所有项目GroupBox es的宽度设置为等于ItemsControl本身的宽度。

你可能需要对Grid做同样的事情,除非你绑定到他们的GroupBox祖先。

现在所有Grid的宽度相同,按钮应排在右侧。