2012-02-02 2 views
0

私は[silverlight] WizardContainerコントロールにいくつかのウィザードページをホストしています。ウィザードはホストフォームにうまく収まります。ページの内容が狭い場合は、コンテナを満たすために展開されません。そこでHorizontalContentAlignmentStretchに設定しました。これは機能します。XAML:親にデータグリッドを制限する方法

しかし、ウィザードページに多数の列を持つデータグリッドが含まれている場合は、幅が固定されていないため、自動スクロールせずにページを引き伸ばします。次のXAMLが350の幅を持つusercontrol上にある場合は、グリッドを350にし、独自のスクロールバーが必要です。 WizardContainerがページminwidthより小さくされた場合、MainScrollerが有効になります。

<Grid x:Name="LayoutRoot" > 
<ScrollViewer x:Name="MainScroller" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" > 
<ContentControl Margin="4" x:Name="WizardContainer" HorizontalContentAlignment="Stretch"> 
<Grid Background="Red" x:Name="WizardPage" MinWidth="300"> 
<sdk:DataGrid HorizontalAlignment="Left" Height="120" > 
<sdk:DataGrid.Columns> 
<sdk:DataGridTextColumn Width="150"/> 
<sdk:DataGridTextColumn Width="150"/> 
<sdk:DataGridTextColumn Width="150"/> 
</sdk:DataGrid.Columns> 
</sdk:DataGrid> 
</Grid>   
</ContentControl> 
</ScrollViewer> 
</Grid> 

データグリッドの幅を固定すると、このXAMLのすべてが機能します。しかし、ユーザーがウィザードコンテナを含むフォームのサイズを変更すると、グリッドが拡大されます。

答えて

0

DataGridはScrollViewerでラップされています。これは事実上、DataGridに利用可能な幅が無限であることを伝えます。 DataGridは制約されていないため、列の幅と同じ幅で表示されます。

HorizontalScrollBarVisibility="Disabled"がデザインに合っている場合(つまり、ScrollViewerからの垂直スクロールのみ必要な場合)に設定できます。これにより、水平スクロールが無効になり、DataGridが水平軸に拘束されます。

DataGridには、ControlTemplateにScrollViewerがあります。一般的な広範なルールとして、ScrollViewer-in-a-ScrollViewerの状況を避けてみてください。デバッグするのは(ほとんど)常に頭痛で、最終的には固定サイズ(またはその場でサイズを計算する)として何かを設定する必要があります。

+0

いいアドバイスが好きです - ありがとう。親フォームの状況をウィザードページの最小幅よりも小さくサイズ変更する状況を処理するScrollviewerがあります。しかし、私の大規模な私は、データグリッドが利用可能な幅に拡大したいと思います。私はフォームのactualwidthにelementnameのバインディングを試していますが、これはブレンドでうまくプレビューするようですが、ランタイムは更新されません。 – MattPil29

関連する問題