2014-09-02 24 views
1

我有一個用於我的用戶控件的設計。該控件包含許多行和列,並且裏面有子網格和行和列。最內側的一行包含一個ListView,其水平和垂直滾動條設置爲Auto。垂直滾動條不在網格中查看WPF中的列表視圖

我能夠查看水平滾動條列表視圖以及最外層的網格,但我無法查看垂直滾動條列表視圖,但外層網格工作正常。

這裏是xaml的相同。

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <StackPanel Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="8,0,0,0"> 
     <Image Source="pack://application:,,,/EMC.DD.CommonFrameworkLayer;component/Images/Items1.png" Width="50" Height="50"></Image> 
     <TextBlock Text="Items" VerticalAlignment="Center" Style="{StaticResource DashboardTextBlockStyle}" Margin="8,0,0,0" ></TextBlock> 
    </StackPanel> 

    <StackPanel Orientation="Horizontal" Grid.Row="1" Background="#eaeaea" Margin="8,0,0,0"> 
     <Image Source="pack://application:,,,/EMC.DD.CommonFrameworkLayer;component/Images/HomeDashBoard.png"></Image> 
     <TextBlock Text="DashBoard" Style="{StaticResource HomeDashBoardTextBlockStyle}" VerticalAlignment="Center" Margin="8,0,0,0"></TextBlock> 
     <TextBlock Text=">" VerticalAlignment="Center" Margin="5,0,0,0" Style="{StaticResource HomeDashBoardTextBlockStyle}" FontWeight="Medium"></TextBlock> 
     <TextBlock Text="Items" VerticalAlignment="Center" Margin="5,0,0,0" Style="{StaticResource HomeDashBoardTextBlockStyle}" FontWeight="Medium"></TextBlock> 
     <TextBlock x:Name="ItemsTextBlock" x:FieldModifier="private" Margin="5,0,0,0" VerticalAlignment="Center"></TextBlock> 
    </StackPanel> 

    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Grid.Row="2" Grid.Column="0"> 

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

      <StackPanel Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="8,10,0,10"> 
       <TextBox x:Name="ItemTextBox" MinWidth="160" Height="25"> 
       </TextBox> 
      </StackPanel> 

      <StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="8,2,0,10"> 
       <ComboBox x:Name="CategoryComboBox" DisplayMemberPath="CategoryName" SelectedValue="CategoryID" SelectedValuePath="CategoryName" 
        Margin="2,2,0,3" MinHeight="27" MinWidth="250" Grid.Row="2" Grid.Column="2" HorizontalAlignment="Left" Grid.ColumnSpan="2" SelectedIndex="-1"/> 
       <Button Style="{StaticResource CRUDButtonStyle}" Content="Search" Margin="5,0,0,0" Click="SearchButton_Click"></Button> 

       <StackPanel Orientation="Horizontal" Margin="150,0,0,0"> 
        <Button Style="{StaticResource CRUDButtonStyle}" Content="New Item" Click="ItemButton_Click" ></Button> 
        <Button Style="{StaticResource CRUDButtonStyle}" Content="Delete Item" Margin="5,0,0,0" Click="DeleteButton_Click"></Button> 
        <Button Style="{StaticResource CRUDButtonStyle}" Content="Delete All" Margin="2,0,0,0" Click="DeleteAllItem_Click"></Button> 
       </StackPanel> 
      </StackPanel> 

      <Grid Grid.Row="2" Margin="8,0,0,0"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="900"/> 
        <ColumnDefinition Width="Auto" MinWidth="200"/> 
       </Grid.ColumnDefinitions> 

       <Grid Grid.Column="0"> 

        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="*"/> 
         <RowDefinition Height="10" /> 
        </Grid.RowDefinitions> 

        <Border Grid.Row="0" Style="{StaticResource DefaultBorderStyle}"> 
         <StackPanel Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Top" Margin="0,0,0,0"> 
          <Image Source="pack://application:,,,/EMC.DD.CommonFrameworkLayer;component/Images/Items1.png"></Image> 
          <TextBlock Text="List Of Items" Margin="5,0,0,0" VerticalAlignment="Center" 
          Style="{StaticResource HomeDashBoardTextBlockStyle}" FontWeight="Normal"/> 
         </StackPanel> 
        </Border> 

        <ListView x:Name="ItemsListView" x:FieldModifier="private" Grid.Row="1" MouseDown="ListViewItem_PreviewMouseDown" 
         SelectionChanged="ListView_SelectionChanged" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto"> 
         <ListView.Resources> 
          <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
           <Setter Property="FontFamily" Value="Segoe UI Light"/> 
           <Setter Property="FontWeight" Value="DemiBold"></Setter> 
           <Setter Property="Height" Value="30"></Setter> 
          </Style> 

          <local:IntToBoolConverter x:Key="IntBoolKey"></local:IntToBoolConverter> 

          <Style x:Key="TextStyle" TargetType="{x:Type TextBlock}"> 
           <EventSetter Event="Hyperlink.Click" Handler="EditClicked" /> 
          </Style> 

          <local:BackgroundConverter x:Key="BackgroundKey"/> 

          <Style x:Key="columnHeaderContianerStyle" TargetType="ListViewItem"> 
           <Setter Property="Background"> 
            <Setter.Value> 
             <Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource BackgroundKey}"/> 
            </Setter.Value> 
           </Setter> 
           <!--<EventSetter Event="PreviewMouseDown" Handler="ListViewItem_PreviewMouseDown"></EventSetter>--> 
          </Style> 

          <Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}"> 
           <Style.Triggers> 
            <Trigger Property="IsMouseOver" Value="False"> 
             <Setter Property="Background" Value="#1570a6"/> 
             <Setter Property="Foreground" Value="#FFFFFF"/> 
            </Trigger> 
            <Trigger Property="IsMouseOver" Value="True"> 
             <Setter Property="Foreground" Value="#000000"/> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 

         </ListView.Resources> 
         <ListView.ItemContainerStyle> 
          <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource columnHeaderContianerStyle}"> 
           <Setter Property="HorizontalContentAlignment" Value="Center"/> 
           <Style.Triggers> 
            <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
             <Setter Property="IsSelected" Value="True" /> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </ListView.ItemContainerStyle> 
         <ListView.View> 
          <GridView AllowsColumnReorder="true" ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}"> 
           <GridViewColumn Width="50" HeaderContainerStyle="{StaticResource myHeaderStyle}"> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <CheckBox Width ="20" Height="20" IsChecked="{Binding Path=IsActive,Converter={StaticResource IntBoolKey}}"></CheckBox> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
           <GridViewColumn Header="Item ID" Width="110" DisplayMemberBinding="{Binding Path=ItemID,Mode=OneWay}" 
           HeaderContainerStyle="{StaticResource myHeaderStyle}"/> 
           <GridViewColumn Header="Item Name" Width="200" DisplayMemberBinding="{Binding Path=ItemName,Mode=OneWay}" 
           HeaderContainerStyle="{StaticResource myHeaderStyle}"/> 
           <GridViewColumn Header="Item Price" Width="200" DisplayMemberBinding="{Binding Path=Price,Mode=OneWay}" 
           HeaderContainerStyle="{StaticResource myHeaderStyle}" > 
           </GridViewColumn> 
           <GridViewColumn Header="Category" Width="200" DisplayMemberBinding="{Binding Path=Category.CategoryName,Mode=OneWay}" 
           HeaderContainerStyle="{StaticResource myHeaderStyle}"/> 
           <GridViewColumn Header="Item Image" Width="200" HeaderContainerStyle="{StaticResource myHeaderStyle}"> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <Image Width="100" Height="50" VerticalAlignment="Center" HorizontalAlignment="Center" 
               Source="{Binding Path=ItemImagePath,Mode=OneWay}"></Image> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
           <GridViewColumn Width="100" HeaderContainerStyle="{StaticResource myHeaderStyle}"> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <TextBlock Name="urlToContent" MinWidth="150" Width="Auto" Style="{StaticResource TextStyle}"> 
               <Hyperlink NavigateUri="{Binding Path=URL}" Name="hlkURL"> 
               <TextBlock Text="Edit" HorizontalAlignment="Center"/> 
              </Hyperlink> 
             </TextBlock> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
          </GridView> 
         </ListView.View> 
        </ListView> 

       </Grid> 

       <Grid Grid.Column="1"> 

        <GroupBox x:Name="ItemDetails" Header="Item Details" FontFamily="Segoe UI" HorizontalAlignment="Center" Margin="2,-10,0,0" 
         VerticalAlignment="Top" Height="Auto" Width="Auto" Grid.Row="0"> 
         <Grid Margin="2,5,0,0" HorizontalAlignment="Center"> 

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

          <Grid Grid.Row="0" HorizontalAlignment="Center"> 

           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto"></RowDefinition> 
            <RowDefinition Height="Auto"></RowDefinition> 
            <RowDefinition Height="Auto"></RowDefinition> 
           </Grid.RowDefinitions> 

           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="10" /> 
            <ColumnDefinition Width="Auto"/> 
            <ColumnDefinition Width="*"/> 
           </Grid.ColumnDefinitions> 

           <TextBlock Text="Item Name" FontFamily="Segoe UI" VerticalAlignment="Center" HorizontalAlignment="Right" Grid.Row="0" Grid.Column="1" 
         Margin="0,0,0,5"/> 
           <TextBlock x:Name="ItemNameTextBlock" Text="{Binding Path=ItemName,Mode=OneWay}" FontFamily="Segoe UI" FontWeight="DemiBold" VerticalAlignment="Top" 
         HorizontalAlignment="Left" Grid.Row="0" Grid.Column="2" Margin="5,0,0,0"/> 

           <TextBlock Text="Category" FontFamily="Segoe UI" VerticalAlignment="Center" HorizontalAlignment="Right" Grid.Row="1" Grid.Column="1" 
         Margin="0,0,0,5"></TextBlock> 
           <TextBlock x:Name="CategoryTextBlock" Text="{Binding Path=Category.CategoryName,Mode=OneWay}" FontFamily="Segoe UI" FontWeight="DemiBold" VerticalAlignment="Top" 
         HorizontalAlignment="Left" Grid.Row="1" Grid.Column="2" Margin="5,0,0,0"/> 

           <TextBlock Text="Item Quantity" FontFamily="Segoe UI" VerticalAlignment="Center" HorizontalAlignment="Right" Grid.Row="2" Grid.Column="1" 
         Margin="0,0,0,5"></TextBlock> 
           <TextBlock x:Name="ItemQuantityTextBlock" Text="{Binding Path=ItemQuantity,Mode=OneWay}" FontFamily="Segoe UI" FontWeight="DemiBold" VerticalAlignment="Top" 
         HorizontalAlignment="Left" Grid.Row="2" Grid.Column="2" Margin="5,0,0,0"/> 

          </Grid> 

          <ListView x:Name="ItemIngredientsListView" Grid.Row="1" Margin="2,0,0,5" ScrollViewer.HorizontalScrollBarVisibility="Auto" 
           ScrollViewer.VerticalScrollBarVisibility="Auto"> 
           <ListView.Resources> 
            <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
             <Setter Property="FontFamily" Value="Segoe UI Light"/> 
             <Setter Property="FontWeight" Value="DemiBold"></Setter> 
             <Setter Property="Height" Value="30"></Setter> 
            </Style> 

            <Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}"> 
             <Style.Triggers> 
              <Trigger Property="IsMouseOver" Value="False"> 
               <Setter Property="Background" Value="#1570a6"/> 
               <Setter Property="Foreground" Value="#FFFFFF"/> 
              </Trigger> 
              <Trigger Property="IsMouseOver" Value="True"> 
               <Setter Property="Foreground" Value="#000000"/> 
              </Trigger> 
             </Style.Triggers> 
            </Style> 

            <local:BackgroundConverter x:Key="BackgroundKey"/> 

            <Style x:Key="columnHeaderContianerStyle" TargetType="ListViewItem"> 
             <Setter Property="Background"> 
              <Setter.Value> 
               <Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource BackgroundKey}"/> 
              </Setter.Value> 
             </Setter> 
             <!--<EventSetter Event="PreviewMouseDown" Handler="ListViewItem_PreviewMouseDown"></EventSetter>--> 
            </Style> 

           </ListView.Resources> 
           <ListView.ItemContainerStyle> 
            <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource columnHeaderContianerStyle}"> 
             <Setter Property="HorizontalContentAlignment" Value="Center"/> 
             <Style.Triggers> 
              <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
               <Setter Property="IsSelected" Value="True" /> 
              </Trigger> 
             </Style.Triggers> 
            </Style> 
           </ListView.ItemContainerStyle> 
           <ListView.View> 
            <GridView AllowsColumnReorder="true" ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}"> 
             <GridViewColumn Header="Ingredient ID" Width="80" DisplayMemberBinding="{Binding Path=ItemIngredientID,Mode=OneWay}" 
              HeaderContainerStyle="{StaticResource myHeaderStyle}"/> 
             <GridViewColumn Header="Ingredient" Width="200" DisplayMemberBinding="{Binding Path=IngredientName,Mode=OneWay}" 
              HeaderContainerStyle="{StaticResource myHeaderStyle}"/> 
            </GridView> 
           </ListView.View> 
          </ListView> 
         </Grid> 
        </GroupBox> 

       </Grid> 
      </Grid> 

     </Grid> 
    </ScrollViewer> 
</Grid> 

可能是我張貼巨大的xaml,因爲我不確定在整個用戶控件中究竟發生了什麼錯誤。

有些人,請看看我的xaml,並告訴我在哪裏我需要更改rowHeight或其他一些東西。

任何幫助高度讚賞。

+1

您可能需要在列表視圖上設置最大高度才能看到滾動條,因爲在外部容器上有滾動條有效地從子項移除滾動條,除非它們具有固定或最大高度集。 – pushpraj 2014-09-02 07:55:15

+0

真棒@pushpraj它的工作完美。我試圖將高度設置爲網格行並做了很多更改,但是我錯過了它自己的listview。感謝您的回答。 – 2014-09-02 08:20:40

回答

1

WPF的ScrollViewer爲其子元素提供無限空間 - 我認爲這是阻礙你看到你的ListView的垂直滾動條。讓我們分析一下你的情況:

  1. 滾動查看器爲其子網格提供無限空間(我們稱之爲A)。
  2. A分爲三行:前兩行的高度將根據它們顯示的內容計算(<RowDefinition Height="Auto" />)。最後一行將採用滾動查看器提供的剩餘無限空間。
  3. 在這最後一行中,放置了另一個網格(我們稱之爲B),它有兩列三行。第二行取剩餘空間(仍然無限),因爲它的高度設置爲*
  4. 在這一行中,列表視圖被放置。這意味着它在WPF佈局系統中具有無限的垂直空間,並且不需要顯示其垂直滾動條。

解決方案可能是限制此行的高度,但提供GridSplitter,以便用戶能夠更改高度。 @pushpraj指出的另一個解決方案(當我寫這篇文章時)是限制列表視圖的高度。

如果您還有其他問題,請隨時詢問。

+1

感謝您的詳細解釋@ feo2x。問題已通過pushpraj解決。 – 2014-09-02 08:22:06

相關問題