#wpf #xaml #c#-4.0 #wpf-controls #wpfdatagrid
#wpf #xaml #c # -4.0 #wpf-элементы управления #wpfdatagrid
Вопрос:
За последние 2 дня я застрял в небольшой проблеме, которую я не знаю, почему я не смог ее решить. Я много раз вытаращил глаза и реализовал различные предложения, предоставленные stack overflow, чтобы решить проблему, но, наконец, я устал от неудачной реализации.
Моя проблема в том, что мне нужна прокручиваемая сетка данных, которую можно было бы разместить внутри элемента управления Grid или DockPanel (как я пробовал с обоими). Ниже приведен код, который я использую.
<Grid IsEnabled="{Binding IsCalcVarGridPartEnable}">
<Grid.Resources>
<BooleanToVisibilityConverter x:Key="boolToVisiblityConverter" />
<sys.converters:BoolToVisibleHiddenConvertor x:Key="boolToVisibleHiddenConvertor"/>
<FrameworkElement x:Key="ProxyElement"
DataContext="{Binding}"/>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="*" />
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Border Style="{StaticResource SeperatorStyle}" Grid.Row="0">
<TextBlock Style="{StaticResource BannerTextStyle}" Text="Calculation Variable" />
</Border>
<Border Style="{StaticResource SeperatorStyle}" Grid.Row="2">
<Button Content="Edit" HorizontalAlignment="Right" Margin="10,5" Command="{Binding EditCalcVarCmd}" />
</Border>
<ContentControl Visibility="Collapsed"
Content="{StaticResource ProxyElement}"/>
<DataGrid AutoGenerateColumns="False"
Name="dataGridCalcVar"
VerticalAlignment="Top"
HorizontalAlignment="Left"
IsReadOnly="True"
SelectionMode="Single"
SelectionUnit="FullRow"
ItemsSource="{Binding CalcVarCollection}"
SelectedItem="{Binding SelectedCalcVar}"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick" >
<i:InvokeCommandAction Command="{Binding CalcVarDoubleClickedCmd}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.ColumnHeaderStyle>
<StaticResourceExtension ResourceKey="DataGridColumnHeaderStyle" />
</DataGrid.ColumnHeaderStyle>
<DataGrid.CellStyle>
<StaticResourceExtension ResourceKey="DataGridCellStyle" />
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Type Description" MinWidth="150" MaxWidth="200" Binding="{Binding CalcTypName}" />
<DataGridTextColumn Header="Variable Description" MinWidth="150" MaxWidth="200" Binding="{Binding CalcVarName}" />
<DataGridTextColumn Header="Major Description" MinWidth="150" MaxWidth="200" Binding="{Binding MjAcctTypDesc}"
Visibility="{Binding DataContext.IsMjMiAcctTypVisible, Source={StaticResource ProxyElement},
Converter={StaticResource boolToVisibleHiddenConvertor}}" />
<DataGridTextColumn Header="Minor Description" MinWidth="150" MaxWidth="200" Binding="{Binding MiAcctTypDesc}"
Visibility="{Binding DataContext.IsMjMiAcctTypVisible, Source={StaticResource ProxyElement},
Converter={StaticResource boolToVisibleHiddenConvertor}}" />
<DataGridTextColumn Header="DNA Value" MinWidth="50" MaxWidth="200" Binding="{Binding CalcVarValueName}" />
<DataGridTextColumn Header="Critical Value" MinWidth="50" MaxWidth="200" Binding="{Binding CriticalValueName}" />
<DataGridTextColumn Header="Note" MinWidth="150" MaxWidth="200" Binding="{Binding Note}" />
</DataGrid.Columns>
</DataGrid>
<sysclient:PartStatusView Grid.RowSpan="5" Grid.ColumnSpan="7"
Style="{DynamicResource PartStatusViewDefaultStyle}" IsTabStop="False"/>
</Grid>
Важно: я могу получить полосу прокрутки только тогда, когда я устанавливаю максимальную высоту элемента управления Datagrid, но я не хочу устанавливать свойство max-height для элемента управления row или datagrid. Я хочу, чтобы при изменении размера окна или любого доступного пространства datagrid устанавливался в это пространство, и когда мы запрашиваем данные, тогда, если данные данных превышают доступное пространство, тогда сетка данных выводит вертикальную полосу прокрутки.
Пожалуйста, помогите мне!!!!!
Надеюсь, я смогу объяснить свою проблему. 🙂 🙂
Спасибо,
Комментарии:
1. Где это
Grid
размещено / используется? Случайно ли один из родителей этогоGrid
aStackPanel
?2. Родительским элементом grid является пользовательский элемент управления.
3. И что является причиной этого
UserControl
? Поднимитесь по визуальному дереву и посмотрите, есть ли у вас где-нибудь на этом пути элемент управления, подобныйStackPanel
илиCanvas
4. На самом деле я использую элемент управления framework, предоставляемый основными разработчиками. Итак, должна быть панель или элемент управления содержимым.
Ответ №1:
Из того, что я вижу, есть два атрибута, которые могут вам здесь помочь
добавить Grid.Row="1"
в вашу сетку данных
удалить VerticalAlignment="Top"
из того же, что фактически мешает ему брать высоту из контейнера
например
<DataGrid AutoGenerateColumns="False"
Name="dataGridCalcVar"
Grid.Row="1"
HorizontalAlignment="Left"
IsReadOnly="True"
SelectionMode="Single"
SelectionUnit="FullRow"
ItemsSource="{Binding CalcVarCollection}"
SelectedItem="{Binding SelectedCalcVar}"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
Я предполагаю, что вы хотите разместить сетку в средней строке, которая занимает оставшееся пространство.
Комментарии:
1. Это решение не сработало. Высота сетки данных увеличивается, чтобы отобразить все данные, но полоса прокрутки не отображается.
2. я проверил, что она работает так, как ожидалось, все, что я не смог протестировать, — это любые имеющиеся у вас стили и шаблоны. возможно ли опубликовать рабочий пример вашего кода, который показывает эту проблему?