2017-12-06 3 views
0

Ich zeige eine List mit chars in einer TextBox, aber der Abstand ist nicht einheitlich.Wie erstellt man DataGrid Matrix aus List Chars?

A B C D E
F G H I J
K L M N O
P Q R S T
U V W X Y


Wie kann ich es an einen WPF binden DataGrid so zeigt es wie eine einheitliche 5x5 Matrix?

Oder gibt es einen anderen Weg, um es einheitlich zu machen?

A B C D E 
F G H I J 
K L M N O 
P Q R S T 
U V W X Y 

C#

public char A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y; 

public List<char> myList = new List<char>() 
{ 
    A, B, C, D, E, 
    F, G, H, I, J, 
    K, L, M, N, O, 
    P, Q, R, S, T, 
    U, V, W, X, Y 
} 

public ObservableCollection<char> myCollection = new ObservableCollection<char>(myList); 

XAML

<DataGrid x:Name="dataGrid" 
      HorizontalAlignment="Left" 
      Height="299" 
      Margin="191,399,0,0" 
      VerticalAlignment="Top" 
      Width="360"/> 
+0

werfen Sie einen Blick auf diese Beiträge: https://stackoverflow.com/questions/43097851/making-a-nxn-tic-tac-toe-gui-wpf-c-sharp, https://stackoverflow.com/questions/37145391/how-to-create-and-use -Matte rix-of-color-boxen-c-sharp-wpf – ASh

Antwort

1

Neben der Möglichkeit einer nichtproportionalen Schrift zu verwenden, wie

<TextBlock FontFamily="Lucida Console"> 
    <Run>ABCDE</Run> 
    <LineBreak/> 
    <Run>FGHIJ</Run> 
    <LineBreak/> 
    <Run>KLMNO</Run> 
    <LineBreak/> 
    <Run>PQRST</Run> 
    <LineBreak/> 
    <Run>UVWXY</Run> 
</TextBlock> 

Sie ein Itemscontrol mit einem Uniform verwenden:

<ItemsControl ItemsSource="ABCDEFGHIJKLMNOPQRSTUVWXY"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Columns="5"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" TextAlignment="Center"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Obwohl die XAML Designer beschwert sich über die ItemsSource Eigenschaft, wird es funktionieren, weil eine Zeichenfolge ein IEnumerable ist und der Text Bindung konvertiert automatisch char zu string.

Sie können natürlich auch die Itemssource in Code hinter gesetzt:

itemsControl.ItemsSource = new List<string>() 
{ 
    "A", "B", "C", "D", "E", 
    "F", "G", "H", "I", "J", 
    "K", "L", "M", "N", "O", 
    "P", "Q", "R", "S", "T", 
    "U", "V", "W", "X", "Y" 
}; 

oder

itemsControl.ItemsSource = new List<char>() 
{ 
    'A', 'B', 'C', 'D', 'E', 
    'F', 'G', 'H', 'I', 'J', 
    'K', 'L', 'M', 'N', 'O', 
    'P', 'Q', 'R', 'S', 'T', 
    'U', 'V', 'W', 'X', 'Y' 
}; 

oder natürlich

itemsControl.ItemsSource = "ABCDEFGHIJKLMNOPQRSTUVWXY"; 
+0

Ich habe meinen Code aktualisiert. Ich benutze Zeichen als variable Platzhalter in der Liste, die ich zu verschiedenen Dingen ändern kann. Ich habe die itemsControl.ItemsSource = new List () verwendet, es funktioniert so weit. Ich muss es anpassen und Ihnen sagen, wie es geht. –

+0

@MattMcManis Sie können natürlich alles in ItemsControl einfügen. Stellen Sie nur sicher, dass das ItemTemplate es anzeigen kann. – Clemens

Verwandte Themen