【问题标题】:wpf grid as itemspaneltemplate gives inconsistent heightswpf网格作为itemspaneltemplate给出不一致的高度
【发布时间】:2013-06-23 15:14:33
【问题描述】:

我正在尝试制作一个星期调度器

因此,我每天都有一个带有网格的列表框作为它的 itemspaneltemplate ,并且每个单独的会话都从数据库中获取其行和行跨度并且它工作得很好

问题是当我有一个简短的约会,所以行跨度只有 2 或 3 并且内容更长,在这种情况下,包含约会的行会增长以容纳更大的内容

我不希望这样,而是约会反映了他们的时间跨度,即使我没有看到所有数据

我尝试了很多我在网上找到的答案组合

这是整个标记

<ListBox Name="lsbTasks" Loaded="lsbTasks_Loaded_1" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" VerticalContentAlignment="Stretch" >
                            <ListBox.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <Grid Initialized="Grid_Initialized_1" Background="Thistle"  IsSharedSizeScope="True"/>
                                </ItemsPanelTemplate>
                            </ListBox.ItemsPanel>
                            <ItemsControl.ItemContainerStyle>
                                <Style>
                                    <Setter Property="Grid.Row" Value="{Binding BusyFrom,Converter={StaticResource BusyFromConverter}}" />
                                    <Setter Property="Grid.RowSpan" Value="{Binding BusyMinutes,Converter={StaticResource BusyMinutesConverter}}" />
                                    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
                                </Style>
                            </ItemsControl.ItemContainerStyle>
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <ScrollViewer ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.IsDeferredScrollingEnabled="True">
                                        <StackPanel Background="Purple" PreviewMouseDown="DockPanel_PreviewMouseDown_1">

                                            <TextBlock TextAlignment="Center" TextWrapping="Wrap" Text="{Binding SessionPlace}" Foreground="Thistle" DockPanel.Dock="Bottom" />
                                            <TextBlock  TextAlignment="Center" TextWrapping="Wrap" Text="{Binding ClientName}" Foreground="White" FontWeight="Bold" DockPanel.Dock="Top" />
                                            <TextBlock  TextAlignment="Center" TextWrapping="Wrap" Text="{Binding OppositionName}" Foreground="White" DockPanel.Dock="Top" />
                                            <TextBlock  TextAlignment="Center" TextWrapping="Wrap" Text="{Binding SubjectName}" Foreground="Thistle" />
                                        </StackPanel>
                                    </ScrollViewer>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>

下面是初始化代码

Private Sub Grid_Initialized_1(sender As Grid, e As EventArgs)
    Dim mnts = MyWorkDaySpan.TotalMinutes
    For i = 1 To mnts / 10
        Dim rd = New RowDefinition With {.Height = New GridLength(1, GridUnitType.Star)}
        'rd.SharedSizeGroup = "RowGroup"
        sender.RowDefinitions.Add(rd)
    Next
End Sub

但行仍然不均匀,如网格线所证明的那样

感谢任何帮助或指导

【问题讨论】:

  • 我猜你在Grid_Initialized_1 中设置了Grid 的RowDefinitions。是否可以在那里设置固定的行高?
  • 您也可以考虑将项目的Height 设置为与其RowSpan 成比例。
  • 谢谢。我不能将固定高度作为可调整大小的窗口。你能详细说明如何使高度与行跨度成正比吗?因为我不知道行高,所以我不能将 rowspan*rowheight 作为元素高度
  • 我猜你知道总行数。然后你可以很容易地从 Grid 的ActualHeight 计算行高,除以行数。
  • 另一种选择是编写一个custom Panel 类(“CalendarPanel”),它定义了两个附加属性BusyFrom 和BusyMinutes,并根据这些属性的值排列其子元素。

标签: wpf listbox grid height row


【解决方案1】:

您应该使用不同的面板,也许是 Canvas,并在 ListBoxItem 样式中绑定 Canvas.Top 和 Height 属性。

另一种选择是编写一个custom Panel 类(“CalendarPanel”),它定义了两个附加属性BusyFrom 和BusyMinutes,并根据这些属性的值排列其子元素。

【讨论】:

    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2018-10-08
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多