コンテンツがテーブルのようなものであるユーザーコントロールがあります。 XAMLを見ると、MainGridは実際には 'テーブル'を表しています。WPFはコンテンツが小さい場合にはスペースよりも少なくなります
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
...
<ScrollViewer AutomationProperties.AutomationId="SchedulerScrolViewer" Grid.Row="1" Grid.Column="1" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" VerticalAlignment="Stretch">
<Grid x:Name="MainGrid" />
</ScrollViewer>
私が例えば100行と100列を持つことができるのでMainGridは、スクロールビューアであり、その場合のコードはうまく動作します。 しかし、次のケースを考慮してください。
利用可能なウィンドウの高さは、たとえば500ピクセルです。メイングリッドでは、高さが25の2つの行があります。そのため、私のMainGridは50ピクセル(25,25)しか使用しませんし、450ピクセルは使用しないことを望みます。
<RowDefinition Height="*" />
のため、私は実際にそのMainGridが500ピクセル(25,475)を取ることになります。どのように私はそのような行動を変えることができますか?
は、私のような何かについて考え、この
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="{Binding CalculatedHeight}" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="{Binding CalculatedWidth}" />
</Grid.ColumnDefinitions>
CalculatedHeightは、次の方法
if(content height > main grid actual height)
{
CalculatedHeight = main grid actual height; // I need scroll viewer
}
else
{
CalculatedHeight = content height;
}
にしかし、その場合に算出されます
、私はパンダが展開されている場合、私はあまり持って(ウィンドウパンダを見守る必要がありますスペースなど)、サイズ変更など、私はそれが良い方法であるかどうかはわかりません。
もし私が<RowDefinition Height="Auto" />
を設定すると、Autoは、その中の要素の高さと同じ高さが与えられているため、スクロールビューアは機能しません。
これを実装する方法はありますか?私は本当に簡単な解決策を見つける
<Grid x:Name="OuterGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" MaxHeight="{Binding ElementName=InnerGrid, Path=ActualHeight, FallbackValue=1}" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0">sdfsdfs</TextBlock>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Visible">
<Grid x:Name="InnerGrid" Height="Auto">
<TextBlock>
jhdsfksjdhf
<LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak />
</TextBlock>
</Grid>
</ScrollViewer>
</Grid>
FallBackValue
は、初期の高さのために必要とされる...
ScrollViewerの高さを50に設定し、2番目のRowDefinitionの高さをAuto(または50)に設定するとどうなりますか? – mm8
しかし、ウィンドウのサイズ変更やエキスパンダーの展開に問題があります。 – gzsun
質問をするときに問題の完全なレポを提供してください:https://stackoverflow.com/help/mcve – mm8