2009-11-02 201 views
0

我有一个ScrollViewer,我试图做的数据绑定的高度。 ScrollViewer拥有很长的列表框WPF高度数据绑定问题

所以这是我的问题。我的ScrollViewer会绑定到我的窗口的高度(Name="MainForm")就好。但那时太长了。

如果我尝试绑定到窗口中的网格(Name="MainGrid"),那么ScrollViewer展开到列表框的全长(不滚动)。

显然我可以硬编码高度,但不会随窗口调整大小。我不想放弃的功能。

任何想法?

这与绑定集的XAML来MainGrid

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="WI Assistant" Height="621.25" Width="943.75" Name="MainForm" FontSize="14"> 
<Grid Name="MainGrid"> 
    <DockPanel Margin="266.25,0,455,12" HorizontalAlignment="Left" Name="dockPanel1"> 
     <StackPanel> 
      <ScrollViewer Height="{Binding ElementName=MainGrid, Path=Height}"> 
        <ListBox Name="cboProjects" FontSize="14" > 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
        <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> <ListBoxItem>Test1</ListBoxItem> 
       </ListBox> 
      </ScrollViewer> 
     </StackPanel> 
    </DockPanel> 
</Grid> 

(这将运行(F5)在XamlPadx

回答

3

把它拿出来StackPanel的,因为StackPanel小号成长在它们的方向上不受限制(在这种情况下是垂直的)。从最简单的解决方案开始:

<Window> 
    <ScrollViewer> 
     <ItemsControl> 
      ... 
     </ItemsControl> 
    </ScrollViewer> 
</Window> 

然后根据需要添加复杂性。

+1

+1对单个元素使用'StackPanel'常常会导致这些问题。 – 2009-11-02 17:13:23

+0

祝福你!我正准备把这根头发拉出来。顺便说一下,我使用堆栈面板来堆栈扩展器(多于1个控件)。发布前我简化了我的Xaml。现在我知道我不能在栈面板内的扩展器内使用ListBox。谢谢! – Vaccano 2009-11-02 17:18:07

+0

还是真的,在一个StackPanel里面的ListBox(扩展器放在一边) – Vaccano 2009-11-02 17:19:14