2016-04-11 14 views
0

aşağıda gibi gösterilecek Modelimin var: Ne elde etmek çalışıyorum yerine satır detayları sahip varsayılan olarak yaptığı gibi göstermek olduğunuWPF ve XAML'de, bir satır sütunları atladıktan sonra üst satırın altına dinamik olarak geçmek için satır ayrıntılarının sütununu dinamik olarak nasıl alabilirim?

enter image description here

, onları görüntülenmesini istediğiniz Üst ızgara sütunlarına hizalanmış. Ayrıntılar kılavuzunun ilk 3 sütunu (boş olmalı) atlamasını ve ayrıntıların üst sıranın 'sokak adı', 'sokak numarası' sütununa hizalanmasını istiyorum.

Eğer birisi bunu başarmak için bakmam gereken özelliklere yönlendirebilseydi, bu harika olurdu.

Güncelleme: Bazı ilerlemeler yaptım, ancak hala yol boyunca değil. Nasıl istediğimi gösteren satırlarım var, ancak sütun yeniden boyutlandırıldığında bozuluyor. Sütun genişliği ile ilgili herhangi bir olay bulamadım veya genişliği ayarlamak için bir kod yazmak için benzer. WPF'de nasıl yapılır? Ayrıca, bunu başarmanın daha iyi bir yolu var mı?

<Window x:Class="AligningDetailsView.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:AligningDetailsView" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
<Window.Resources> 
    <CollectionViewSource x:Key="customerViewSource" 
          Source="{Binding Customers}" 
          d:DesignSource="{d:DesignInstance {x:Type local:Customer}, CreateList=True}" /> 
</Window.Resources> 
<Grid> 

    <DataGrid x:Name="customerDataGrid" 
       ItemsSource="{Binding Source={StaticResource customerViewSource}}" 
       EnableRowVirtualization="True" 
       AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected" 
       Margin="0,27,0.4,-0.2"> 
     <DataGrid.Columns> 
      <DataGridTextColumn x:Name="firstNameColumn" 
           Width="100" 
           Header="First Name" 
           Binding="{Binding FirstName}" /> 
      <DataGridTextColumn x:Name="lastNameColumn" 
           Width="100" 
           Header="Last Name" 
           Binding="{Binding LastName}" /> 
      <DataGridTextColumn x:Name="phoneColumn" 
           Width="100" 
           Header="Age" 
           Binding="{Binding Age}" /> 
      <DataGridTextColumn x:Name="colStreetNumber" 
           Width="100" 
           Header="StreetNumber" /> 
      <DataGridTextColumn x:Name="colStreetName" 
           Width="100" 
           Header="StreetNumber" /> 
      <DataGridTextColumn x:Name="colState" 
           Width="100" 
           Header="State" /> 
     </DataGrid.Columns> 
     <DataGrid.RowDetailsTemplate> 
      <DataTemplate> 
       <DataGrid ItemsSource="{Binding Addresses}" 
          RowHeaderWidth="300" 
          HeadersVisibility="Row" 
          AutoGenerateColumns="False"> 

        <DataGrid.Columns> 
         <DataGridTextColumn x:Name="detail1" 
           Binding="{Binding StreetNumber}"   Width="100" /> 
         <DataGridTextColumn x:Name="detail2" 
              Width="100" Binding="{Binding StreetName}" /> 
         <DataGridTextColumn x:Name="detail3" 
              Width="100" Binding="{Binding State}" /> 
        </DataGrid.Columns> 
       </DataGrid> 

      </DataTemplate> 
     </DataGrid.RowDetailsTemplate> 
    </DataGrid> 
</Grid> 

ve kod arkasında: enter image description here

xaml kodu

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     Customers = GetCustomers(); 
     InitializeComponent(); 
    } 

    private List<Customer> GetCustomers() 
    { 
     return new List<Customer>() 
     { 
      new Customer() 
      { 
       FirstName = "James", 
       LastName = "aka", 
       Age = 22, 
       Addresses = new List<Address>() 
       { 
        new Address() 
        { 
         StreetName = "abdf st", 
         StreetNumber = 123, 
         State = "OH" 
        }, 
        new Address() 
        { 
         StreetName = "skdjf abdf st", 
         StreetNumber = 12233, 
         State = "OH" 
        } 
       } 
      } 
     }; 
    } 
    public List<Customer> Customers { get; set; } 
} 

public class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int Age { get; set; } 
    public List<Address> Addresses { get; set; } 
} 

public class Address 
{ 
    public int StreetNumber { get; set; } 
    public string StreetName { get; set; } 
    public string State { get; set; } 
} 

cevap

0

Sen çocuk sıranın solunda küçük bir boşluk olan satır başlığını kaldırabilirsiniz :

<DataGrid RowHeaderWidth="50" ... > 
+0

Demek istediğim, ayrıntı satırının sokak adının altında olmasını istiyorum. sokak numarası vb. sütun başlıkları ilk satırda olmak yerine, kendilerine ait bir ızgara olarak gösterilmeleridir. – NoSaidTheCompiler

+0

Sorunuzu daha açık olacak şekilde değiştirerek başlayın ve daha önce yaptığınız şeyi göstermek için bazı Xaml ve kod ekleyin. – benPearce

+0

benPearce, Verdiğiniz RowHeaderWidth bilgisine dayanarak biraz ilerleme kaydettim. Ayrıca sorumu kodla da güncelledim. ColumnHeaderWidthChanged gibi bir etkinliğe kod eklemeyi düşünüyordum, ancak böyle bir şey yok gibi görünüyor. Kullanıcı üst sütun genişliğini değiştirdiğinde, ayrıntıların sütun genişliğini ayarlamak için nasıl gidebileceğimi biliyor muydunuz? Teşekkürler. – NoSaidTheCompiler

İlgili konular