繁体   English   中英

WPF ListBox WPF XAML内部的顶部对齐

[英]Top Alignment inside WPF ListBox WPF XAML

我在WPF窗口中对齐堆栈面板/网格时出现问题。 关于我在做什么错的任何想法吗? 当我尝试使列表框内的内容顶部对齐时,似乎出现了这种情况,该列表框使用水平对齐的堆栈面板显示项目。

如果我使用ItemsSource = {Binding BoardMarkerRows}将容纳ListBox的网格的高度设置为1400,则对齐将开始正常工作(但我希望此网格具有自动高度)。

屏幕截图显示对齐: 在此处输入图片说明

这是我的XAML

    <Viewbox Grid.ColumnSpan="2" VerticalAlignment="Top">
        <StackPanel   VerticalAlignment="Top">

            <StackPanel Name="StackPanelOptions">
                <StackPanel  Orientation="Horizontal ">
                    <Button Content="Init" HorizontalAlignment="Left" Margin="2" VerticalAlignment="Top" Width="75" Click="Init"/>
                    <Button Content="Rotate" HorizontalAlignment="Left" Margin="2" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
                    <Button Content ="Start" Command="{Binding BoardMarkerStartUpdatesCommand}"  Margin="2"/>
                    <Button Content ="Hide"  Name="ButtonHideHeader"  Margin="2" Click="ButtonHideHeader_Click"/>




                    <TextBlock Margin="2">
                        <TextBlock.Text>
                            <MultiBinding StringFormat="Status: {0}">
                                <Binding Path="BoardMarker.Status"  />
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                    <TextBlock Margin="2">
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0} Columns">
                                <Binding Path="BoardMarker.BoardMarkerColumns.Count "  />
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                    <TextBox Height="24" TextWrapping="Wrap" Text="{Binding BoardMarker.MaximumResultDate}" Width="271"/>
                    <CheckBox Content="Use Maximum Result Date" IsChecked="{Binding BoardMarker.UseMaximumResultDate}"/>
                    <Label Content="Number Rows"/>
                    <TextBox Height="24" TextWrapping="Wrap" Margin="2" Text="{Binding BoardMarker.BoardMarkerSettings.NumberRowsPerColumn}" Width="50"/>

                    <Label Content="Days Offset"/>
                    <TextBox Height="24" TextWrapping="Wrap" Margin="2" Text="{Binding BoardMarker.DaysOffset}" Width="50"/>


                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <Label Content="Show All Runners"/>
                    <TextBox Height="24" TextWrapping="Wrap" Margin="2" Text="{Binding BoardMarker.ShowAll}" Width="300"/>


                </StackPanel>


            </StackPanel>


            <StackPanel Orientation="Vertical " VerticalAlignment="Top">
                <StackPanel >
                    <Viewbox VerticalAlignment="Top" Stretch="Uniform">

                        <ListBox ItemsSource ="{Binding BoardMarker.BoardMarkerColumns}"  Height="Auto" Width="Auto">
                            <ListBox.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal" VerticalAlignment="Top"/>
                                </ItemsPanelTemplate>
                            </ListBox.ItemsPanel>

                            <ListBox.ItemTemplate>
                                <DataTemplate>

                                    <Grid VerticalAlignment="Top">
                                        <ListBox  Height="Auto" 
                                    ItemsSource="{Binding .BoardMarkerRows}" Margin="5" Width="Auto" HorizontalAlignment="Stretch">

                                            <ListBox.ItemTemplate>
                                                <DataTemplate>

                                                    <Grid >


                                                        <Grid Height="Auto" Background="LightGreen" Width="180"  Visibility="{Binding ConverterParameter=ArkleEvent 
                                                    , Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}" VerticalAlignment="Top" >
                                                            <Grid.ColumnDefinitions>
                                                                <ColumnDefinition Width="75"/>
                                                                <ColumnDefinition Width="*"/>
                                                            </Grid.ColumnDefinitions>

                                                            <!--<TextBlock Text="{Binding RowType}" />-->
                                                            <TextBlock Text="{Binding ArkleEvent.Name}" Margin="2" Width="Auto" Height="Auto" FontWeight="Bold" />
                                                            <TextBlock Grid.Column="1" HorizontalAlignment="Right" Text="{Binding ArkleEvent.Going}" Margin="2" Width="Auto" Height="Auto" />
                                                        </Grid>





                                                        <Grid Background="LightBlue" HorizontalAlignment="Left" Height="Auto" VerticalAlignment="Top" Width="180"
                                                              Visibility="{Binding ConverterParameter=ArkleMarket, Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}">
                                                            <Grid.ColumnDefinitions>
                                                                <ColumnDefinition Width="110"/>
                                                                <ColumnDefinition Width="*"/>
                                                            </Grid.ColumnDefinitions>

                                                            <TextBlock Grid.Column="0" HorizontalAlignment="Left" FontWeight="Bold">
                                                                <TextBlock.Text>
                                                                    <MultiBinding StringFormat="{}{0:HH:mm} {1}">
                                                                        <Binding Path="ArkleMarket.ExpectedOffDate"  />
                                                                        <!--<Binding Path="RowType" />-->
                                                                        <Binding Path="ArkleMarket.RaceLength"  />
                                                                    </MultiBinding>
                                                                </TextBlock.Text>
                                                            </TextBlock>



                                                            <TextBlock Grid.Column="1" HorizontalAlignment="Right">
                                                                <TextBlock.Text>
                                                                    <MultiBinding StringFormat=" {0} Run {1} NR">
                                                                        <Binding Path="ArkleMarket" Converter="{StaticResource ArkleMarketToNumberRunnersConverter}" ConverterParameter="StillRunning"  />
                                                                        <!--<Binding Path="RowType" />-->
                                                                        <Binding Path="ArkleMarket" Converter="{StaticResource ArkleMarketToNumberRunnersConverter}" ConverterParameter="NR"  />
                                                                        <!--<Binding Path="ArkleMarket" Converter="{StaticResource ArkleMarketToNumberRunnersConverter}" ConverterParameter=",ConverterParameter=NR />-->
                                                                    </MultiBinding>
                                                                </TextBlock.Text>
                                                            </TextBlock>


                                                        </Grid>


                                                        <TextBlock Text="---------------------------------"  Margin="0,-3,0,-3" Foreground="DodgerBlue"
                                                                     Visibility="{Binding ConverterParameter=ArkleSelectionStaticFirst,
                                                            Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}"/>

                                                        <Grid 
                                                            Visibility="{Binding ConverterParameter=ArkleSelectionStatic,
                                                            Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}">

                                                            <Grid.ColumnDefinitions>
                                                                <ColumnDefinition Width="Auto"/>
                                                                <ColumnDefinition Width="88"/>
                                                                <ColumnDefinition Width="35"/>
                                                                <ColumnDefinition Width="38"/>
                                                            </Grid.ColumnDefinitions>
                                                            <!--<TextBlock Text="{Binding RowIndex}" Margin="2" Width="Auto" Height="Auto" />-->
                                                            <TextBlock Grid.Column="0" Text="{Binding ArkleSelection.SelectionNumber,StringFormat={}{0:00}}" Margin="2" Width="15" />
                                                            <TextBlock Grid.Column="1" Text="{Binding ArkleSelection.Name}" Margin="2" Width="100" />
                                                            <TextBlock Grid.Column="2" Text="{Binding ArkleSelection.PriceCurrent}" Margin="2" Width="Auto" HorizontalAlignment="Right" />
                                                            <TextBlock Grid.Column="3" Text="{Binding ArkleSelection.OpeningPrice}" Margin="2" Width="Auto" Foreground="DarkGray" HorizontalAlignment="Right"  TextDecorations="Strikethrough" />


                                                        </Grid>





                                                        <Grid Visibility="{Binding ConverterParameter=ArkleSelectionRotating, Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}">

                                                            <Grid.ColumnDefinitions>
                                                                <ColumnDefinition Width="Auto"/>
                                                                <ColumnDefinition Width="88"/>
                                                                <ColumnDefinition Width="35"/>
                                                                <ColumnDefinition Width="38"/>
                                                            </Grid.ColumnDefinitions>


                                                            <!--<TextBlock Text="{Binding RowIndex}" Margin="2" Width="Auto" Height="Auto" />-->
                                                            <TextBlock Grid.Column="0" Text="{Binding ArkleSelection.SelectionNumber,StringFormat={}{0:00}}" Margin="2" Width="15" />
                                                            <TextBlock Grid.Column="1" Text="{Binding ArkleSelection.Name}" Margin="2" Width="100" />
                                                            <TextBlock Grid.Column="2" Text="{Binding ArkleSelection.PriceCurrent}" Margin="2" Width="Auto" HorizontalAlignment="Right" />
                                                            <TextBlock Grid.Column="3" Text="{Binding ArkleSelection.OpeningPrice}" Margin="2" Width="Auto" Foreground="DarkGray" HorizontalAlignment="Right" />


                                                        </Grid>



                                                        <StackPanel  Visibility="{Binding ConverterParameter=TextRow, 
                                                            Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}">
                                                            <Label Content="{Binding Text}" />
                                                        </StackPanel>

                                                        <Grid Visibility="{Binding ConverterParameter=ArkleSelectionResult, 
                                                            Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}">

                                                            <Grid.ColumnDefinitions>
                                                                <ColumnDefinition Width="Auto"/>
                                                                <ColumnDefinition Width="88"/>
                                                                <ColumnDefinition Width="35"/>
                                                                <ColumnDefinition Width="38"/>
                                                            </Grid.ColumnDefinitions>
                                                            <!--<TextBlock Text="{Binding RowIndex}" Margin="2" Width="Auto" Height="Auto" />-->
                                                            <TextBlock Grid.Column="0" Text="{Binding ArkleSelection.SelectionNumber,StringFormat={}{0:00}}" Margin="2" Width="15" />
                                                            <TextBlock Grid.Column="1" Text="{Binding ArkleSelection.Name}" Margin="2" Width="100" />
                                                            <TextBlock Grid.Column="2" Text="{Binding ArkleSelection.PriceCurrent}" Margin="2" Width="Auto" HorizontalAlignment="Right" />
                                                            <TextBlock Grid.Column="3" Text="{Binding ArkleSelection.FinishingPosition,Converter={StaticResource ArkleSelectionFinishPositionToOrdinalDisplayText}}" Margin="2" Width="Auto"  HorizontalAlignment="Right" />


                                                        </Grid>

                                                        <StackPanel Visibility="{Binding ConverterParameter=ArkleSelectionNonRunner, Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}">
                                                            <StackPanel Orientation="Horizontal">
                                                                <!--<TextBlock Text="{Binding RowIndex}" Margin="2" Width="Auto" Height="Auto" />-->
                                                                <TextBlock Text="{Binding ArkleSelection.SelectionNumber,StringFormat={}{0:00}}" Margin="2" Width="15" />
                                                                <TextBlock Text="{Binding ArkleSelection.Name}" Margin="2" Width="100" Foreground="DarkGray"  />
                                                                <TextBlock Text="NR" Margin="2" Width="30" Foreground="DarkGray"  />
                                                                <TextBlock Text="{Binding ArkleSelection.OpeningPrice}" Margin="2" Width="30" Foreground="DarkGray" />

                                                            </StackPanel>

                                                        </StackPanel>

                                                    </Grid>


                                                </DataTemplate>
                                            </ListBox.ItemTemplate>
                                        </ListBox>


                                    </Grid>


                                </DataTemplate>
                            </ListBox.ItemTemplate>

                        </ListBox>



                    </Viewbox>



                </StackPanel>
            </StackPanel>

        </StackPanel>
    </Viewbox>


</Grid>

添加到parent-listBox VerticalContentAlignment="Top"

编辑:
演示很少,从源代码进行的更改最少:

<Viewbox Grid.ColumnSpan="2" VerticalAlignment="Top">
    <StackPanel   VerticalAlignment="Top">
        <StackPanel Orientation="Vertical " VerticalAlignment="Top">
            <StackPanel Height="338" >
                <Viewbox  VerticalAlignment="Top"  Stretch="Uniform">
                    <ListBox VerticalContentAlignment="Top"  Height="Auto" Width="Auto">
                        <ListBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal" VerticalAlignment="Top"/>
                            </ItemsPanelTemplate>
                        </ListBox.ItemsPanel>
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid VerticalAlignment="Top">
                                    <ListBox  Height="Auto"    Margin="5" Width="Auto" HorizontalAlignment="Stretch">
                                        <ListBox.ItemTemplate>
                                            <DataTemplate>
                                                <TextBlock Width="40" Height="40">Some Child</TextBlock>
                                            </DataTemplate>
                                        </ListBox.ItemTemplate>
                                        <ListBox.Items>
                                            <TextBlock />
                                            <TextBlock />
                                            <TextBlock />
                                        </ListBox.Items>
                                    </ListBox>
                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                        <ListBox.Items>
                            <ListBoxItem>
                                <TextBlock />
                                <ListBoxItem.Style>
                                    <Style TargetType="ListBoxItem" >
                                        <Setter Property="Template" >
                                            <Setter.Value>
                                                <ControlTemplate>
                                                    <Border Margin="5" Background="Red" Height="150" Width="40" >
                                                        <TextBlock >Demo tol item</TextBlock>
                                                    </Border>
                                                </ControlTemplate>
                                            </Setter.Value>
                                        </Setter>
                                    </Style>
                                </ListBoxItem.Style>
                            </ListBoxItem>
                            <TextBlock />
                            <TextBlock />
                            <TextBlock />
                        </ListBox.Items>
                    </ListBox>
                </Viewbox>
            </StackPanel>
        </StackPanel>
    </StackPanel>
</Viewbox>

我没有足够的声誉将其发布为评论,所以我将其发布为答案。

我相信您的问题可能出在您的ListBox.ItemTemplate中:

                      ...
                      <ListBox.ItemTemplate>
                            <DataTemplate>

                                <Grid VerticalAlignment="Top">
                                    <ListBox  Height="Auto" 
                                ItemsSource="{Binding .BoardMarkerRows}" Margin="5" Width="Auto" HorizontalAlignment="Stretch">

                                        <ListBox.ItemTemplate>
                                            <DataTemplate>

                                                <Grid > // Missing vertical allignment in this grid


                                                    <Grid Height="Auto" Background="LightGreen" Width="180"  Visibility="{Binding ConverterParameter=ArkleEvent 
                                                , Converter={StaticResource BoardMarketRowTypeToVisibilityConverter}}" VerticalAlignment="Top" >
                                                        <Grid.ColumnDefinitions>
                                                            <ColumnDefinition Width="75"/>
                                                            <ColumnDefinition Width="*"/>
                                                        </Grid.ColumnDefinitions>

                                                        <!--<TextBlock Text="{Binding RowType}" />-->
                                                        <TextBlock Text="{Binding ArkleEvent.Name}" Margin="2" Width="Auto" Height="Auto" FontWeight="Bold" />
                                                        <TextBlock Grid.Column="1" HorizontalAlignment="Right" Text="{Binding ArkleEvent.Going}" Margin="2" Width="Auto" Height="Auto" />
                                                    </Grid>
                                                    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM