我有以下代码,其中包含一个DataGrid,它列出了与ListBox中选定项目对应的项目。一切运行良好,但是DataGrid列的宽度表现出奇怪的问题。我将“name”列的宽度设置为star,以便“wert”列占用其内容所需的空间,而“name”列占用其余部分。这起作用了,但有点问题。当应用程序启动时,所有列都处于最小宽度状态,只有在ListBox中选择另一个项目时,列的宽度才会更新为所需的值(“name”的星号,“wert”的自动)。
我尝试在应用程序加载时使用datagrid的UpdateLayout方法,但没有帮助。
此外,我正在使用一个expander,当所有expander关闭时,我必须先展开其中一个项目,然后再加载listbox中的另一个项目,才能使宽度正确。
请问可以指导我正确的方向吗? :)
更新:初始问题已解决,但还有另一个小问题: 列不再折叠,但它们也没有达到所需的大小。它们的大小适合其标题名称,而不是行内容。仅当默认情况下关闭expander时才会发生这种情况。当我将expander设置为展开时,所有列都将设置为其所需的内容宽度。
以下是使用的代码:
此外,我正在使用一个expander,当所有expander关闭时,我必须先展开其中一个项目,然后再加载listbox中的另一个项目,才能使宽度正确。
请问可以指导我正确的方向吗? :)
更新:初始问题已解决,但还有另一个小问题: 列不再折叠,但它们也没有达到所需的大小。它们的大小适合其标题名称,而不是行内容。仅当默认情况下关闭expander时才会发生这种情况。当我将expander设置为展开时,所有列都将设置为其所需的内容宽度。
以下是使用的代码:
<Grid.DataContext>
<XmlDataProvider x:Name="XmlData" Source="entries.xml" XPath="Root/Person" />
</Grid.DataContext>
<ListBox Name="PersonListBox"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource listBoxTemplate}"
IsSynchronizedWithCurrentItem="True"
Visibility="Visible" SelectionMode="Single" SelectedIndex="-1" DataContext="{Binding}">
</ListBox>
<DataGrid IsSynchronizedWithCurrentItem="True" Name="itemGrid"
DataContext="{Binding ElementName=PersonListBox, Path=SelectedItem}"
CanUserResizeColumns="False"
CanUserResizeRows="False"
IsReadOnly="true"
Background="White"
HorizontalScrollBarVisibility="Hidden"
AutoGenerateColumns="False">
<DataGrid.Resources>
<CollectionViewSource x:Key="items" Source="{Binding XPath=item}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@name"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</DataGrid.Resources>
<DataGrid.ItemsSource>
<Binding Source="{StaticResource items}"/>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="Name" Binding="{Binding XPath=@name}"/>
<DataGridTextColumn Header="Wert" Binding="{Binding XPath=@value, Converter={StaticResource sumConverter}}}"/>
</DataGrid.Columns>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander >
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=Items, Converter={StaticResource sumConverter}}" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>