2014-01-24 4 views
0

У меня есть древовидная структура в wpf, которая показывает странное поведение (по крайней мере, я думаю, это странно). Я не вижу нигде, где я могу прикрепить изображение, но в основном на некоторых элементах, на которые он похож, он имеет двойное расстояние или имеет дополнительный 3px или около того, и на некоторых он выглядит как однораздельный. Вот это XAML определение его:Treeview показывает случайное дополнительное пространство

 <TreeView Margin="5,0,0,5" ItemsSource="{Binding SortedCategories}" HorizontalContentAlignment="Stretch"> 
      <TreeView.Resources> 
       <HierarchicalDataTemplate DataType="{x:Type COBie:CategoryData}" ItemsSource="{Binding SortedTypes}"> 
       <CheckBox IsChecked="{Binding AnyChecked, Mode=TwoWay}" Content="{Binding CategoryName}" IsEnabled="{Binding HasTypes}" /> 
      </HierarchicalDataTemplate> 
       <DataTemplate DataType="{x:Type COBie:InstanceData}"> 
        <CheckBox IsChecked="{Binding isChecked, Mode=TwoWay}" Content="{Binding ElemID}" /> 
       </DataTemplate> 
       <DataTemplate DataType="{x:Type COBie:TypeData}"> 
        <TreeViewItem IsEnabled="{Binding HasInstances}" HorizontalContentAlignment="Stretch"> 
         <TreeViewItem.Header> 
          <CheckBox IsChecked="{Binding isChecked, Mode=TwoWay}" Content="{Binding ElemName}" /> 
         </TreeViewItem.Header> 
         <ListView ItemsSource="{Binding SortedInstances}"> 
          <ListView.View> 
           <GridView> 
            <GridViewColumn> 
             <GridViewColumn.CellTemplate> 
              <DataTemplate> 
               <CheckBox IsChecked="{Binding isChecked, Mode=TwoWay}" /> 
              </DataTemplate> 
             </GridViewColumn.CellTemplate> 
            </GridViewColumn> 
            <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ElemID}" /> 
            <GridViewColumn Header="Name" DisplayMemberBinding="{Binding ElemName}" /> 
            <GridViewColumn Header="Mark" DisplayMemberBinding="{Binding Mark}" /> 
            <GridViewColumn Header="Room" DisplayMemberBinding="{Binding RoomDisplay}" /> 
           </GridView> 
          </ListView.View> 
         </ListView> 
        </TreeViewItem> 
       </DataTemplate> 
      </TreeView.Resources> 
     </TreeView> 

Единственный другой соответствующий стиль, который будет применяться в:

 <Style TargetType="TreeViewItem"> 
      <Setter Property="IsExpanded" Value="{Binding IsExpanded}" /> 
     </Style> 

Я не вижу где-нибудь, что определяет запас на всех, и даже если он сделал все элементы одного класса, поэтому они должны применяться ко всем одинаково.

Кто-нибудь знает, что происходит?

+0

Также я прошел и проверил значения ElemName для элементов, которые были и не отображали дополнительное пространство, и не имеет дополнительных пробелов или строк в значении свойства ElemName (которое является тем, что отображается ... – sfaust

+0

Ok Я до сих пор не понимаю, почему это происходит.Я пробовал жестко кодировать высоту флажка в заголовке, маржа осталась. Поскольку она действительно выглядит как маржа, я старался жестко кодировать маржу до 0, без изменений. но вместо того, чтобы использовать Content = {Binding ElemName} в определении флажка, я расширил его до , и это выглядит нормально. Я не уверен, почему, но это работал ... Если кто-то может пролить свет на то, почему второй работал, а не первый, я буду отмечать его как ответ ... – sfaust

ответ

-1

У меня была та же проблема, что были, казалось бы, случайные промежутки. После того, как я подошел поближе, я обнаружил, что пробелы появились вокруг предметов, у которых есть подписи под именами.

Если вы поместите строку непосредственно в свойство содержимого CheckBox и в ней содержатся символы подчеркивания, CheckBox будет окружать TextBlock с помощью Control под именем AccessText, возможно, для поддержки клавиш быстрого доступа (аналогично подчеркиванию в свойстве Content Button).

Теперь по какой-либо причине маржа флажка установлена ​​на TextBlock совершенно нормально, если не задействован AccessText, но не установлен в TextBlock внутри AccessText. Таким образом, TextBlock внутри AccessText будет иметь стиль TextBlock по умолчанию, который в моем случае был с Margin = 5.

Я предполагаю, что в вашем случае это должна быть тесно связанная с этим проблема.

+0

Ха, интересно. ave, так как перешел от этого и использовал трюк с текстовым блоком, и пользовательский интерфейс был немного изменен, но я попробую, когда смогу. Однако, поскольку вы единственный, кто должен ответить, я буду продолжать и отмечать его как ответ :) – sfaust

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