如果我使用"*"设置DataGrid(位于RowDetailesTemplate)列的宽度 - 列缩放不起作用
<DataGrid>
...
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid Margin="10" Height="100">
<DataGrid.Columns>
<DataGridTextColumn Header="header A" Width="3*" />
<DataGridTextColumn Header="header B" Width="2*" />
<DataGridTextColumn Header="header C" Width="*" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
但是如果我用Grid替换DataGrid并使用"*"scailing works设置它的列宽
<Grid Margin="5" Height="100">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="header A" Background="LightGray" TextAlignment="Center" HorizontalAlignment="Stretch"></TextBlock>
<TextBlock Text="header B" Grid.Column="1" TextAlignment="Center" HorizontalAlignment="Stretch"></TextBlock>
<TextBlock Text="header C" Grid.Column="2" Background="LightGray" TextAlignment="Center" HorizontalAlignment="Stretch"></TextBlock>
</Grid>
Run Code Online (Sandbox Code Playgroud)
如何修复DataGrid缩放?
解:
<DataGrid HorizontalScrollBarVisibility="Disabled">
...
<DataGrid.RowDetailsTemplate>
...
</DataGrid.RowDetailsTemplate>
</DataGrid>
Run Code Online (Sandbox Code Playgroud) 我今天早些时候遇到了这个问题,但找不到解决方案。在SelectedItem
的DataGrid
这里面RowDetailsTemplate
的另一个DataGrid
没有被置位时,我选择里面一排的DataGrid
这里面的RowDetailsTemplate
。(很难解释清楚。)
绑定对于列表都正常工作。MainViewModel 包含一个ObservableCollection
ofMyItem
对象,这就是外部DataGrid
绑定到的对象。
该MyItem
对象包含一个ObservableCollection
ofMyItem2
对象并且它们正确绑定到内部DataGrid
。
该MyItem
对象还有一个名为的属性SelectedItem2
,该属性应该绑定到SelectedItem
内部的 ,DataGrid
但永远不会被设置。
顺便说一句:我正在使用 VS2012 和 .Net 4.5。
例子:
MainWindow.xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpfApplication1="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<wpfApplication1:MainWindowViewModel x:Key="MainVm"/>
</Window.Resources>
<Grid DataContext="{StaticResource MainVm}">
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=MyItem1s}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="*"
Binding="{Binding Path=Name}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding Path=Item2s}"
SelectedItem="{Binding …
Run Code Online (Sandbox Code Playgroud) 使用 MVVM 标准在 DataGrid 的 RowDetails 模板中添加多个图像。
我有一个带有 DataGrid 的检查窗口,用于保存损坏物品的描述以及检查员的姓名首字母。更重要的是,这个DataGrid的RowDetailsTemplate需要保存检查员拍摄的损坏物品的图片(因此损坏物品的图片可能不止一张)。
我有一个 DamagedWindow.xaml 旨在创建我的 DamagedItem 条目。它看起来像这样:
数据网格 (.XAML)
<DataGrid ItemsSource="{Binding Pictures}" SelectedItem="{Binding SelectedPicture}" AutoGenerateColumns="False" Grid.Column="1" Grid.Row="2" Margin="5" HorizontalAlignment="Stretch" Name="DataGrid1" VerticalAlignment="Stretch" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Titre" Binding="{Binding Name}" Width="*" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<Image Height="100" Source="{Binding Path}" />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
如您所见,我的 RowDetails 模板在此 DataGrid 中运行良好。我有一个名为 PicturesList 的类,它继承了我的 PictureModel( Name
, Description
, Path
)的 ObservableCollection 。
您在 DataGrid 上方看到的文本框是我的 DamagedItemModel ( Description
, Initiales
, PicturesList
) 的属性。因此,当用户单击接受(复选标记)按钮时,将损坏的项添加到损坏的项列表中,然后从我的主窗口将其设置为 DataGrid …