好的,這裏是我的代碼。請注意,StackPanel直接位於UserControl中。使WrapPanel尊重他父母的寬度
<StackPanel Orientation="Horizontal">
<ScrollViewer
Width="450"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
>
<Rectangle Width="400" Height="4000" Fill="BlanchedAlmond"></Rectangle>
</ScrollViewer>
<ScrollViewer
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
>
<ItemsControl
BorderBrush="Green"
BorderThickness="2"
ItemsSource="{Binding Path=MyObservableCollection}"
ItemTemplate="{StaticResource FatTemplate}"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel
Orientation="Horizontal"
>
</WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</StackPanel>
(代碼EDITED)
注意,矩形只是療法是東陽滾動瀏覽器的內容是irrevelant。
的問題是:在WrapPanel只是水平擴展和dosent膜...
我發現了一些解決方案。
1-絕對寬度的WrapPanel(但隨後劑量調整窗口大小)。
2-將寬度綁定到它的父寬度ItemsControl或ScrollViewer(ScrollViewer在像這樣的有限情況下工作得更好)。
Width="{Binding RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type ScrollViewer}},
Path=ActualWidth}"
這種技術的問題是,如果你在一個StackPanel或網格拿到旁邊有一個控制,則需要將其綁定到它的父大小減去旁邊的控制。我來這裏是很難的事情。我建造我的轉換器適用於數量的數學運算recived這樣的話,我可以。減去一個guiven寬度到它的父寬度:
Width="{Binding RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type UserControl}},
Path=ActualWidth,
Converter={StaticResource Convertisseur_Size_WXYZ},
ConverterParameter=-260}"
但儘管如此,因爲你不能綁定你傳遞給ConverterParameter值,
ConverterParameter={Binding ...} (dosent work)
我希望能夠調整我的應用程序與我的WrapPanel和ScrollViewer中調整好,
我想我的用戶是容易維護,
我希望我的代碼比這些依賴於父控件類型的大型綁定表達式更清潔。
所以我的問題是:什麼是更好的解決方案?
注意:如果有任何不清楚的地方,我可以添加詳細信息。
它在一個網格而不是StackPanel中工作正常,maby它與StackPanel或其他東西有一個調整大小的錯誤? – Gab
我不認爲這是一個錯誤。如果將控件放置在網格單元中,默認情況下它的大小將完全適合該單元格中的可用空間。 StackPanel不會那樣做。是否有理由不能使用具有兩個單元而不是StackPanel的網格? – haagel
雅我可能只是使用網格。當看到代碼時,StackPanel看起來更好看,因爲它看起來更清晰一些,但正如肯特所說,它會導致問題。 – Gab