2012-02-16 2 views
1

Я создал однострочную сетку в xaml, а затем динамически добавляю строки в C#. Тем не менее, хотя они ПОЧТИ выстраиваются в линию, они не делают QUITE так. Почему это будет, когда код тот же?xaml и C# должны быть эквивалентными, но они не являются

Наиболее уместный часть XAML является:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="4*" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="3*" /> 
     <ColumnDefinition Width="2*" /> 
     <ColumnDefinition Width="2*" /> 
    </Grid.ColumnDefinitions> 

Наиболее уместный часть C# является:

Grid grd = new Grid(); 
ColumnDefinition c0 = new ColumnDefinition(); 
c0.Width = new GridLength(1, GridUnitType.Star); 
ColumnDefinition c1 = new ColumnDefinition(); 
c1.Width = new GridLength(1, GridUnitType.Star); 
ColumnDefinition c2 = new ColumnDefinition(); 
c2.Width = new GridLength(1, GridUnitType.Star); 
ColumnDefinition c3 = new ColumnDefinition(); 
c3.Width = new GridLength(4, GridUnitType.Star); 
ColumnDefinition c4 = new ColumnDefinition(); 
c4.Width = new GridLength(1, GridUnitType.Star); 
ColumnDefinition c5 = new ColumnDefinition(); 
c5.Width = new GridLength(3, GridUnitType.Star); 
ColumnDefinition c6 = new ColumnDefinition(); 
c6.Width = new GridLength(2, GridUnitType.Star); 
ColumnDefinition c7 = new ColumnDefinition(); 
c7.Width = new GridLength(2, GridUnitType.Star); 
grd.ColumnDefinitions.Add(c0); 
grd.ColumnDefinitions.Add(c1); 
grd.ColumnDefinitions.Add(c2); 
grd.ColumnDefinitions.Add(c3); 
grd.ColumnDefinitions.Add(c4); 
grd.ColumnDefinitions.Add(c5); 
grd.ColumnDefinitions.Add(c6); 
grd.ColumnDefinitions.Add(c7); 
// Add it to the StackPanel 
spNufan.Children.Add(grd); 

Screenshot http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-02-16/EHnCudinikxcfprHxjywowEcwBssAcpbdchkeinAqJdhvuwDIhJxoonrjGEq/MisalignedColumns.bmp.scaled1000.jpg

Обновлено

Кажется, у меня есть выбирать между тем, чтобы все мои столбцы выстроились в линию и имели действительно широкий форму ИЛИ, позволяющую «ячейкам» обертывать с помощью выравнивания волнистой/волнистой колонны.

Сначала я имел обертку работает нормально, но колонны не были точно выровнены, но теперь, когда я добавил следующее (SharedSizeGroup элемент) к моему XAML:

<StackPanel x:Name="spNufan" Grid.IsSharedSizeScope="True" 
     Orientation="Vertical"> 
<Grid ShowGridLines="True" > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition SharedSizeGroup="ZeroethColumn" Width="*" /> 
     <ColumnDefinition SharedSizeGroup="FirstColumn" Width="*" /> 
     <ColumnDefinition SharedSizeGroup="SecondColumn" Width="*" /> 
     <ColumnDefinition SharedSizeGroup="ThirdColumn" Width="4*" /> 
     <ColumnDefinition SharedSizeGroup="FourthColumn" Width="*" /> 
     <ColumnDefinition SharedSizeGroup="FifthColumn" Width="3*" /> 
     <ColumnDefinition SharedSizeGroup="SixthColumn" Width="2*" /> 
     <ColumnDefinition SharedSizeGroup="SeventhColumn" Width="2*" /> 
    </Grid.ColumnDefinitions> 
    <TextBlock Grid.Column="0" 
       Margin="2" 
       TextAlignment="Left" 
       TextWrapping="Wrap" 
       . . . 

... это нет больше не имеет (позволяют клеткам завернуть, как они должны), хотя у меня есть TextWrapping установлен на «Wrap»

Вот мой уместна C#:

Grid grd = new Grid(); 
grd.ShowGridLines = true; 
ColumnDefinition c0 = new ColumnDefinition(); 
c0.Width = new GridLength(1, GridUnitType.Star); 
c0.SharedSizeGroup = "ZeroethColumn"; 
. . . 
spNufan.Children.Add(grd); 
. . . 
TextBlock tbDateTime = new TextBlock(); 
tbDateTime.Margin = _margin; 
tbDateTime.Background = scb; 
tbDateTime.TextWrapping = TextWrapping.Wrap; 
tbDateTime.TextAlignment = TextAlignment.Left; 
tbDateTime.VerticalAlignment = VerticalAlignment.Center; 
tbDateTime.Text = ADateTime.ToString(); 
Grid.SetColumn(tbDateTime, LogParsePumpViewerConsts.GRID_COL_DATETIME); 
grd.Children.Add(tbDateTime); 
+3

Можете ли вы предоставить скриншоты, чтобы визуально показать, как они отличаются? –

+0

У вас есть автоматическое создание столбцов, установленных в true ..? если так установлено, что для false также этот spNufan.Children.Add (grd); похоже, что-то из сообщения здесь вчера .. для метода .Children.Add() – MethodMan

+0

И вы тщательно проверили все настройки Margin и Padding? –

ответ

2

у вас есть различное содержание в оранжевом Гроу p по сравнению с красной группой. Переполнение текста приведет к тому, что размеры столбцов несколько отличаются. Наиболее заметно в первом столбце, 2/12/2012 больше, чем 2/8/2012.

+0

Ах, да, столбцы каждой строки относятся к его собственной строке, поэтому это имеет смысл. Итак ... есть ли способ заставить каждую строку использовать ту же ширину, что и первая, без указания абсолютной ширины? –

+0

Да, столбцы могут делиться размером. Перспектива http://wpf.2000things.com/2011/11/07/424-getting-data-bound-items-in-a-listbox-to-be-a-consistent-size/ для деталей. –

+0

Я попытался установить SharedSizeGroup через в xaml и c0.SharedSizeGroup = "ZeroethColumn"; в C#, но он все еще перекошен - некоторые из колонн имеют поразительное сходство с Пизанской башней. –

Смежные вопросы