मैं DataGrid के लिए शेष स्थान को भरने के लिए एक DataGrid कॉलम प्राप्त करने का प्रयास कर रहा हूं, जब माता-पिता के नियंत्रण में एक ScrollViewer होता है जिसमें कॉलम अधिक नहीं होता है Width शीर्ष स्तर की खिड़की की तुलना में।

जैसा कि नीचे दी गई दो छवियों में दिखाया गया है, डेटाग्रिड स्वयं वांछित व्यवहार करता है यदि DataGrid कॉलम Width="Auto" के साथ सेट हैं। DataGrid पैरेंट नियंत्रण में चौड़ाई को भरने के लिए फैला है, और ScrollViewer को नियंत्रण के आकार के रूप में किक करने की अनुमति देता है। हालांकि DataGrid में काफी जगह बर्बाद होती है।

No Scrolling

Scrolling

हालांकि, अगर मैं विवरण कॉलम के लिए Width="*" का उपयोग करता हूं, तो नियंत्रण की चौड़ाई शीर्ष स्तर की विंडो की तुलना में काफी व्यापक हो जाती है।

enter image description here

लगभग एक जैसा प्रश्न है (अनुत्तरित) यहां ए>।

नीचे स्क्रॉलव्यूअर के तत्वों के लिए कुछ नमूना XAML है। मैंने कुछ पैरेंट चौड़ाई के आधार पर MaxWidth का DataGrid सेट करने की कोशिश की, जो स्पेस गॉबलिंग कॉलम में राज करेगा, लेकिन उस दृष्टिकोण ने अब तक काम नहीं किया है। मैं एक MaxWidth को हार्ड कोड कर सकता था, लेकिन मैं चाहता हूं कि DataGrid दृश्य क्षेत्र तक जितना संभव हो सके फैलाए।

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Background="{StaticResource ControlBackgroundBrush}">
    <Grid MinWidth="600" MinHeight="400">
        <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="10"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="10"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Label Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Style="{DynamicResource LabelHeader}" Content="{Binding Title, Mode=OneWay}" />
        <Label Grid.Row="1" Grid.Column="1" Style="{DynamicResource EntityIndexNameInput}" Content="{Binding EntityIndexNameLabel, Mode=OneWay}" />
        <Label Grid.Row="3" Grid.Column="1" Style="{DynamicResource DescriptionInput}" Content="{Binding DescriptionLabel, Mode=OneWay}" />
        <TextBox Grid.Row="1" Grid.Column="2" ToolTip="{Binding EntityIndexNameValidationMessage, Mode=OneWay}" Text="{Binding EntityIndexName, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" MaxLength="255" Validation.ErrorTemplate="{x:Null}" Loaded="TextBox_Loaded" />
        <WrapPanel Grid.Row="2" Grid.Column="2">
            <CheckBox Style="{DynamicResource IsPrimaryKeyIndexInput}" ToolTip="{Binding IsPrimaryKeyIndexValidationMessage}" Content="{Binding IsPrimaryKeyIndexLabel, Mode=OneWay}" IsChecked="{Binding IsPrimaryKeyIndex}" />
            <CheckBox Style="{DynamicResource IsUniqueIndexInput}" ToolTip="{Binding IsUniqueIndexValidationMessage}" Content="{Binding IsUniqueIndexLabel, Mode=OneWay}" IsChecked="{Binding IsUniqueIndex}" />
        </WrapPanel>
        <TextBox Grid.Row="3" Grid.Column="2" ToolTip="{Binding DescriptionValidationMessage, Mode=OneWay}" Text="{Binding Description, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" Height="120" MaxLength="2000" Validation.ErrorTemplate="{x:Null}" />
        <GroupBox Header="{Binding Source={StaticResource labels}, Path=PropertiesHeader}" Grid.Row="4" Grid.Column="2">
            <Grid Margin="2">
                <DataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility="Column" ItemsSource="{Binding Items}" MaxWidth="{Binding RelativeSource={RelativeSource AncestorType=Grid}, Path=ActualSize.Width}">
                    <DataGrid.Columns>
                        <lib:BindableDataGridComboBoxColumn Header="{Binding Source={StaticResource labels}, Path=EntityIndexPropertyNameHeader}" DisplayMemberPath="PropertyName" SelectedValuePath="PropertyID" SelectedValueBinding="{Binding PropertyID}" ItemsSource="{Binding EntityDataProperties}" />
                        <DataGridTextColumn Header="{Binding Source={StaticResource labels}, Path=OrderHeader}" Binding="{Binding PropertyOrder, Mode=TwoWay}" Width="Auto" />
                        <DataGridTextColumn Header="{Binding Source={StaticResource labels}, Path=DescriptionHeader}" Binding="{Binding Description, Mode=TwoWay}" Width="*" />
                    </DataGrid.Columns>
                </DataGrid>
            </Grid>
        </GroupBox>
        <StackPanel Orientation="Horizontal" Grid.Row="5" Grid.Column="2" Margin="5">
            <Button Command="{Binding UpdateCommand}" Content="{Binding UpdateButtonLabel}"></Button>
            <Button Command="{Binding ResetCommand}" Content="{Binding ResetButtonLabel}"></Button>
            <Button Command="{Binding DefaultsCommand}" Content="{Binding DefaultsButtonLabel}"></Button>
            <Button Command="{Binding CloseConfirmCommand}" Content="{Binding CloseButtonLabel}"></Button>
        </StackPanel>
    </Grid>
</ScrollViewer>

इस मुद्दे पर कोई अन्य दृष्टिकोण?

0
Dave Clemmer 15 जुलाई 2011, 00:56

1 उत्तर

सबसे बढ़िया उत्तर

मैं स्क्रॉलव्यूअर की सामग्री को बहुत व्यापक होने से रोकने की कोशिश करूंगा:

<ScrollViewer ...>
    <Grid MinWidth="600" MinHeight="400"
          MaxWidth="{Binding ActualWidth,
                     RelativeSource={RelativeSource FindAncestor,
                                                    AncestorType=ScrollViewer}}">
        ...
1
Vlad 15 जुलाई 2011, 01:08
+1 बिल्कुल सही, धन्यवाद व्लाद! मैक्सविड्थ बाध्यकारी के साथ मैं लगभग वहां था।
 – 
Dave Clemmer
15 जुलाई 2011, 01:16