現在、辞書(それ自体は辞書自体で保持されている)を表示しようとしています。WPF ListView個々の高さで表示される項目
最初はUniformGridをItemsPanelTemplateとして使用していましたが、表示するアイテムは個別の高さを持つことができました。
私はUniformGridを使ってすべてのコンテンツを表示できますが、GridまたはStackPanelをItemsPanelTemplateとして使用することはできません。
下のコードは、各操作ブロックに高さは可変ですが、同じ操作高さが与えられているという欠点があります。 私は、StackPanelを使うのが最善だと結論づけた後、オペレーションは必要な高さになるように表示されます。しかし、私が試したとき、彼らはListViewの高さのほんの一部を取ることを再確認しました。
ワース: Operation-UserControl自体は高さを評価し、それに応じてレイアウトを構築します。したがって、すべてのコンテンツを表示するのに必要なスペースは必要ありませんが、使用可能なスペースに収まるコンテンツが表示されます。
ListViewItems(= operations)がListViewのフルハイトをとるようにするにはどうすればよいですか?
EDIT:明確化
説明行動がどのような制御を述べたが、他は私に知らせて、必要なfuntionalityを提供できるとできない場合...
EDIT2:いくつかの例
が利用可能な全スペース:500
スクロールバーがありません。
追記:そこにはmaxItemLimitはありませんが、それはITEMCOUNT個が10
考える1項目超えてしまう可能性は非常に低いです:(すべてのコンテンツ300を表示するために必要なスペースを)
この単一の項目はかかるだろう300
:10個の項目を考えると150、200
(おそらく唯一のStackPanelでの作業。)
:(これらはスペースの150と200が必要になります)
どちらのアイテムがフルサイズで表示されます:2つの項目を考えます これらの10は、500で完全に望ましいサイズに均等にまたは相対的に絞り込まれます(1アイテムあたり50個)。
両方の動作は問題ありません。
<UserControl x:Name="vDay" x:Class="RefServiceClient.Day"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:RefServiceClient"
mc:Ignorable="d"
d:DesignHeight="60" d:DesignWidth="120"
MinHeight="40">
<Grid x:Name="gridDay"
Width="{Binding ActualWidth, ElementName=vDay, Mode=OneWay}"
Height="{Binding ActualHeight, ElementName=vDay, Mode=OneWay}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="DayHeader" Grid.Row="0">
<!--containing header info: several textboxes, which are irrelevant for the question-->
<TextBox x:Name="dayShortname"
Grid.Row="0" Grid.Column="1"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Margin="1"
Text="{Binding Path=Value.DayShortname}"/>
</Grid>
<ListView x:Name="operations" Grid.Row="1" Background="Aqua"
ItemsSource="{Binding Path=Value.OperationList}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListView.ItemTemplate>
<DataTemplate>
<local:Operation Background="Crimson" VerticalContentAlignment="Stretch" VerticalAlignment="Stretch"/>
<!--<local:Operation Background="Crimson" />-->
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<!--<Grid Grid.IsSharedSizeScope="True"/>-->
<!--<StackPanel/>-->
<!--<VirtualizingStackPanel Orientation="Vertical"/>-->
<UniformGrid Columns="1"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</Grid>
問題はあなたの 'local:Operation'実装だと思います。適切な高さが要求される場合、itemsPanelとして 'StackPanel'を持つ' ListView'は、各リスト項目に適切なスペースを与えます。 – grek40
@ grek40私はあなたにそこに従うことができます。しかしListViewは複数の 'local:Operation'を保持することができ、利用可能な総スペースは同じであると私の意見では1つの解決策しかありません: ' local:Operations'は最小限のコンテンツ(header-data)使用可能なスペースがある場合は詳細データを表示します。 それ以外の場合(操作が常に必要なスペースを取る場合)、スクロールバーなしですべての「操作」を表示することはできません。 – Evaniar
'UserControl'の代わりに' StackPanel'を使って 'DataTemplate'を使ってみましたか? – XAMlMAX