2011-10-25 27 views
1

我得到了下面的代碼,它包含一個DataGrid,它列出了項目,並對列表框中的選定項目進行了迴應。一切正常,但DataGrid列的寬度更加粗糙。我將「name」列的寬度設置爲星號,以便「wert」列獲取其內容所需的空間,而「名稱」列將剩下其餘部分。這是工作,但有一點問題。當應用程序啓動時,所有列都處於其最小寬度,並且只在ListBox中選擇另一個項目將列的寬度更新爲所需值(星號爲「name」,auto爲「wert」)。 我嘗試在應用程序加載時使用DataGrid的UpdateLayout方法,但這並沒有幫助。DataGrid的列寬(width =「*」)不是「刷新」

此外,我正在使用擴展器,並且當所有擴展器都關閉時,我必須首先展開其中一個項目,然後在列表框中加載另一個項目,以使寬度正確。

任何人都可以請指點我正確的方向嗎? :)

UPDATE:最初的問題解決了,但是還有另外一個小問題: 的列不再崩潰,但theye不在其所需的大小無論是。它們的大小適合其標題名稱,而不是行內容。這僅在擴展器默認關閉時纔會發生。當我將擴展器設置爲展開狀態時,所有列都根據需要設置爲其內容寬度。

下面是使用代碼:

<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 [email protected]}"/> 
        <DataGridTextColumn Header="Wert" Binding="{Binding [email protected], 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> 

回答

11

,我發現這個post,導致我的答案。總之,默認的GroupStyle.Panel(StackPanel)不能適應DataGrid Width「*」,因此列會崩潰。只需添加

<GroupStyle.Panel> 
    <ItemsPanelTemplate> 
     <DataGridRowsPresenter/> 
    </ItemsPanelTemplate>    
</GroupStyle.Panel> 

GroupStyle,你應該是好的。

+0

工程。感謝您的時間:) – ch40s

+0

更新的問題^^ – ch40s

+0

您是否嘗試將列的寬度設置爲「自動」而不是「*」? – philt5252