开发者

wpf layout help

I have the following xaml which resides in a wpf user control -

<Grid>    
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="*" />
            <RowDefinition Height="30" />
        </Grid.RowDefinitions>

        <TextBox 
            x:Name="MyTxt"
            TextWrapping="WrapWithOverflow" 
            Grid.Row="0"  
            />

        <ListView                 
            x:Name="MyList"
            ItemsSource="{Binding}"
            Grid.Row="1"
            />

        <Label
            Grid.Row="2"
            />
    </Grid>

This control is nested within a grid in a view. I would like to have the text box be a set height at the top of the grid, the label at the bottom showing as a fixed height at the bottom of the grid. I want the list view to fill the rest of the screen area.

The problem that I am having is the listview does not size correctly. If I have too many records that show up in it, it extends beyond the window and no scroll bars are available to scroll down. I therefore cannot get to the bottom to see the vertical scroll bar if the data stretches off to the right of the screen.

I was able to set the listview to a fixed height and that worked, but I would like it to be more dynamic and resize with the window if possible.

Does anyone have any tips that might get the sizing correct?

Thanks for any thoughts.

EDIT - Here is the xaml for the containing grid in the mainwindow view. this was adapted from the article by Josh Smith here

<Gri开发者_如何学JAVAd>
      <Border 
           Style="{StaticResource MainBorderStyle}"
           >
           <HeaderedContentControl
             Content="{Binding Path=Workspaces}"
             ContentTemplate="{StaticResource WorkspacesTemplate}"                  
             />
         </Border>
 </Grid>

I do have the scrollviewer properties set as mentioned in some of the answers below. Here is the datatemplate for the workspace

<DataTemplate x:Key="WorkspacesTemplate">
        <TabControl 
      IsSynchronizedWithCurrentItem="True" 
      ItemsSource="{Binding}" 
      ItemTemplate="{StaticResource ClosableTabItemTemplate}"
      Margin="4"
      />
    </DataTemplate>


Can you just add these properties to the listview?

ScrollViewer.CanContentScroll = "True" 
ScrollViewer.VerticalScrollBarVisibility="Visible" <!-- or "Auto"   -->

Everything else looks ok to me. You have the 3 rows, 2 of which are absolute, the other stretching. You also have the listview in the 2nd row, so it should stretch with it.

if that doesn't work, try wrapping the ListView in a scrollviewer

<ScrollViewer>
    <ListView/>
</ScrollViewer>


What is the VerticalAlignment of a ListBox by default? You might need to set the vertical alignment to Stretch.

<ListView                 
        x:Name="MyList"
        ItemsSource="{Binding}"
        Grid.Row="1"
        VerticalAlignment="Stretch"
        />    


I was able to get it working. If I change the containing grid in the main window to use a ContentControl instead of a HeaderedcontentControl, it works as expected.

Thank for any help.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜