2013-04-18 8 views
5

में उपयोगकर्ता नियंत्रण के अंदर डेटाग्रिड में एपियरिंग नहीं है मेरे पास डब्ल्यूपीएफ में उपयोगकर्ता नियंत्रण है जिसमें डेटाग्रिड है। मैं इस उपयोगकर्ता नियंत्रण को TabControl के TabItem के अंदर एक विंडो में जोड़ता हूं। वर्टिकल स्क्रॉलबार दिखाई नहीं दे रहा है। मैंने खिड़की का आकार बदल दिया और ऐसा लगता है कि डेटाग्रिड की ऊंचाई पर विचार करने के बाद उपयोगकर्ता नियंत्रण अपनी पूरी ऊंचाई ले रहा है।लंबवत स्क्रॉलबार wpf

वर्टिकल स्क्रॉलबार कैसे दिखता है और फिर भी उपयोगकर्ता नियंत्रण और खिड़की की ऊंचाई के अनुसार उपलब्ध ऊंचाई के आधार पर डेटाग्रिड की ऊंचाई को ऑटो पर रखता है?

संपादित करें: मुख्य विंडो:

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

उपयोगकर्ता नियंत्रण:

<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

आप शायद सेट करना चाहते हैं चाहते हैं डेटा ग्रिड के [VerticalScrollBarVisibility] (http://msdn.microsoft.com/en-us/library/ system.windows.controls.datagrid.verticalscrollbarvisibility (v = vs.95) .aspx) ** दृश्यमान ** पर ** आपके द्वारा प्रदान की गई जानकारी के आधार पर कहना मुश्किल है। –

+0

मुझे लगता है कि स्टैकपैनल के अंदर डेटाग्रिड डालना इस मामले में अच्छा विचार नहीं है।आप स्क्रॉलबार के साथ डेटाग्रिड का उपयोग करने में सक्षम नहीं होंगे। – Dilshod

+0

संभावित डुप्लिकेट [मैं WPF डेटाग्रिड पर स्क्रॉलबार कैसे सक्षम कर सकता हूं?] (Http://stackoverflow.com/questions/673516/how-can-i-enable-scrollbars-on-the-wpf-datagrid) – Dzyann

उत्तर

8

UPDATED: मैं सिर्फ 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

VerticalScrollBarVisibilityVisible पर सेट करें।

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

डिफ़ॉल्ट मान Auto है।

अद्यतन

अपने कोड मुझे पता चला में देखने के बाद, कि स्क्रॉलबार visibility तुम्हारा असली समस्या नहीं है। आपकी समस्या डेटाग्रिड StackPanel में निश्चित ऊंचाई के बिना है। यह प्रदर्शित होने के लिए DataGrid में सभी वस्तुओं के लिए आवश्यक सभी जगह लेता है और यही वजह है कि ScrollBarVisible नहीं था। जैसा कि मैंने कहा VerticalScrollBarVisibility के लिए पहले डिफ़ॉल्ट मान Auto है और इसका मतलब है:

MSDN: ऑटो - एक स्क्रॉलबार दिखाई देता है और जब व्यूपोर्ट के सभी प्रदर्शित नहीं कर सकता ScrollViewer के आयाम सामग्री के लिए लागू किया जाता है सामग्री।

4

खड़ी स्क्रॉलबार दिखाई देते हैं और अभी भी डेटा ग्रिड ऑटो की ऊंचाई रखना सुनिश्चित करें।
उत्तर नहीं है।

जब तक ऊंचाई ऑटो हो, तब तक ऑटो का मतलब बढ़ेगा क्योंकि मुझे वह ऊंचाई मिलती है जो मुझे चाहिए।

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

आप इसे उपलब्ध स्थान का उपयोग करने के तो का उपयोग *

<RowDefinition Height="*"></RowDefinition> 
संबंधित मुद्दे