2013-04-18 73 views
5

私はWPFでDataGridを持つユーザーコントロールを持っています。 このユーザーコントロールは、TabControlのTabItem内のウィンドウに追加します。 垂直スクロールバーが表示されません。私はウィンドウのサイズを変更し、ユーザーコントロールがDataGridの高さを考慮して完全な高さをとっているようです。wpfのusercontrol内のdatagridに縦スクロールバーが表示されない

垂直スクロールバーを表示させ、ユーザーコントロールとウィンドウの高さごとに利用できる高さに応じて、DataGridの高さをautoに維持する方法はありますか?

EDIT: メインウィンドウ:

<Window> 
    <Grid> 
    <TabControl Name="tc" 
       SelectionChanged="tc_SelectionChanged"> 
     <TabItem Header="ABC"> 
     <local:uc1 /> 
     </TabItem> 
     <TabItem Header="DEF"> 
     <local:uc2 /> 
     </TabItem> 
    </TabControl> 
    </Grid> 
</Window> 

ユーザーコントロール:UPDATED

<UserControl> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="30"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <StackPanel Grid.Row="0" 
       Grid.Column="0" 
       Orientation="Vertical"> 
     <StackPanel Orientation="Horizontal"> 
     <Button>Add</Button> 
     <Button>Remove</Button> 
     <Button>Refresh</Button> 
     </StackPanel> 

     <Label Name="lblTopMessage">some message</Label> 

     <DataGrid Name="dg" 
       IsReadOnly="True"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Name}" 
           Header="Name" 
           Width="*"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Value}" 
           Header="Value" 
           Width="130"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding List}" 
           Header="List" 
           Width="*"></DataGridTextColumn> 
     </DataGrid.Columns> 
     </DataGrid> 

    </StackPanel> 
    <Grid Grid.Row="0" 
      Grid.Column="1" 
      Name="gridTS"> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="100"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <TextBlock Name="lblNewSource" 
       Grid.Row="0" 
       Grid.ColumnSpan="2" 
       HorizontalAlignment="Center" 
       Padding="0 5 0 0" 
       FontWeight="Bold">New Source</TextBlock> 
     <TextBlock Grid.Row="1" 
       Grid.Column="0" 
       Padding="10 10 0 0">Name:</TextBlock> 
     <TextBlock Grid.Row="2" 
       Grid.Column="0" 
       Padding="10 10 0 0">Value:</TextBlock> 
     <TextBlock Grid.Row="3" 
       Grid.Column="0" 
       Padding="10 10 0 0">List:</TextBlock> 

     <TextBox Grid.Row="1" 
       Grid.Column="1" 
       Name="txtName" 
       IsEnabled="False"></TextBox> 
     <ComboBox Grid.Row="2" 
       Grid.Column="1" 
       Name="cbValue"></ComboBox> 
     <ListBox Grid.Row="3" 
       Grid.Column="1" 
       Name="lbList"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
      <CheckBox Margin="3 5 0 3" 
         Content="{Binding Name}" 
         IsChecked="{Binding IsActive}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
     </ListBox> 

     <Button Name="btnSave" 
       Click="btnSave_Click" 
       Grid.Row="4" 
       Grid.Column="1">Save</Button> 
     <TextBlock TextWrapping="WrapWithOverflow" 
       Name="lblMessage" 
       Grid.Row="5" 
       Grid.Column="1" 
       Margin="0 10 10 0"></TextBlock> 
    </Grid> 
    </Grid> 
</UserControl> 
+1

を使用system.windows.controls.datagrid.verticalscrollbarvisibility(v = vs95).aspx)を** Visible **に変更しましたが、提供した情報に基づいて言うのは難しいです。 –

+0

私はStackPanelの中​​にDataGridを置くことはこの場合は良い考えではないと思います。ScrollBarsでDataGridを使用することはできません。 – Dilshod

+0

[WPF Datagridでスクロールバーを有効にする方法は?](http://stackoverflow.com/questions/673516/how-can-i-enable-scrollbars-on-the-wpf-datagrid) – Dzyann

答えて

8

:私はちょうどのStackPanelのうち、データグリッドを取っ 。このコードを試してみてください:

<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="45.361"></RowDefinition> 
    <RowDefinition Height="102.639" /> 
    <RowDefinition Height="30"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="2*"></ColumnDefinition> 
    <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <StackPanel Grid.Row="0" 
       Grid.Column="0" 
       Orientation="Vertical"> 
    <StackPanel Orientation="Horizontal"> 
     <Button>Add</Button> 
     <Button>Remove</Button> 
     <Button>Refresh</Button> 
    </StackPanel> 

    <Label Name="lblTopMessage">some message</Label> 

    </StackPanel> 

    <DataGrid Grid.Row="1" 
      Name="dg" 
      IsReadOnly="True"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Name}" 
          Header="Name" 
          Width="*"></DataGridTextColumn> 
     <DataGridTextColumn Binding="{Binding Value}" 
          Header="Value" 
          Width="130"></DataGridTextColumn> 
     <DataGridTextColumn Binding="{Binding List}" 
          Header="List" 
          Width="*"></DataGridTextColumn> 
    </DataGrid.Columns> 
    </DataGrid> 

    <Grid Grid.Row="0" 
     Grid.Column="1" 
     Name="gridTS" 
     Grid.RowSpan="2"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="100"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <TextBlock Name="lblNewSource" 
       Grid.Row="0" 
       Grid.ColumnSpan="2" 
       HorizontalAlignment="Center" 
       Padding="0 5 0 0" 
       FontWeight="Bold">New Source</TextBlock> 
    <TextBlock Grid.Row="1" 
       Grid.Column="0" 
       Padding="10 10 0 0">Name:</TextBlock> 
    <TextBlock Grid.Row="2" 
       Grid.Column="0" 
       Padding="10 10 0 0">Value:</TextBlock> 
    <TextBlock Grid.Row="3" 
       Grid.Column="0" 
       Padding="10 10 0 0">List:</TextBlock> 

    <TextBox Grid.Row="1" 
      Grid.Column="1" 
      Name="txtName" 
      IsEnabled="False"></TextBox> 
    <ComboBox Grid.Row="2" 
       Grid.Column="1" 
       Name="cbValue"></ComboBox> 
    <ListBox Grid.Row="3" 
      Grid.Column="1" 
      Name="lbList"> 
     <ListBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Margin="3 5 0 3" 
        Content="{Binding Name}" 
        IsChecked="{Binding IsActive}" /> 
     </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

    <Button Name="btnSave" 
      Grid.Row="4" 
      Grid.Column="1">Save</Button> 
    <TextBlock TextWrapping="WrapWithOverflow" 
       Name="lblMessage" 
       Grid.Row="5" 
       Grid.Column="1" 
       Margin="0 10 10 0"></TextBlock> 
    </Grid> 
</Grid> 

私は役に立つと思います。

0

セットVerticalScrollBarVisibilityからVisible

<DaraGrid VerticalScrollBarVisibility="Visible" ... > 
... 
</DataGrid> 

デフォルト値はAutoです。

UPDATE

あなたのコードの中に見た後、私はスクロールバーvisibilityがあなたの本当の問題ではないことを、発見しました。あなたの問題はStackPanelで固定高さのないDataGridです。 DataGridのすべてのアイテムに必要なすべてのスペースが表示され、ScrollBarVisibleでない理由が表示されます。私はVerticalScrollBarVisibilityのため、以前のデフォルト値はAutoであると述べ、それは手段として:

MSDN: オート - スクロールバーが表示され、ビューポートがすべてを表示できないときScrollViewerのの寸法は、コンテンツに適用されますコンテンツ。

4

垂直スクロールバーを表示し、DataGrid autoの高さを維持します。
答えはNOです。

高さが自動である限り、それは自動的に私が望むすべての高さを得ることを意味します。

<RowDefinition Height="Auto"></RowDefinition> 

あなたはそれが可能なスペースを使用したい場合、あなたはおそらく、DataGridの[VerticalScrollBarVisibility](http://msdn.microsoft.com/en-us/library/を設定したい*

<RowDefinition Height="*"></RowDefinition>