2014-01-24 68 views
0

我在WPF樹視圖所顯示出一些奇怪的行爲(至少我認爲這是奇怪)。我沒有看到任何地方我可以附加圖像,但基本上在一些項目上,它看起來像是雙倍間隔或有一個額外的3px左右的餘量,有些看起來像是單間隔。這裏是XAML定義它:樹狀視圖顯示隨機的額外空間

 <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

還行我仍然不明白爲什麼會發生這種情況,我試圖在頭文件中對複選框的高度進行硬編碼,邊距保持不變,因爲它看起來像一個邊距,所以我試圖將邊距編碼爲0,沒有變化。如果不是在複選框定義中使用Content = {Binding ElemName},而是將其擴展爲並且它看起來很正常,但我不確定爲什麼,工作......如果任何人可以闡明爲什麼第二次工作,而不是第一次,我會把它標記爲答案... – sfaust

回答

-1

我有同樣的問題,即有看似隨意的差距。 經過仔細觀察後,我發現圍繞物品出現了空白,並在名稱中出現了下劃線。

如果將字符串直接放在CheckBox的content屬性中並且它包含下劃線,CheckBox將用名爲AccessText的Control包圍TextBlock,可能支持快捷鍵(類似於Button的Content屬性中的下劃線)。

由於某些原因,複選框的邊距在TextBlock上設置得非常好,如果沒有涉及AccessText,但沒有在AccessText內的TextBlock上設置。這樣AccessText裏面的TextBlock將具有默認的TextBlock Style,在我的例子中是Margin = 5。

我在你的情況下猜它必須是一個密切相關的問題。

+0

嗯,有趣的。我h因爲從這一點開始,並且使用了textblock技巧和用戶界面已經修改了一下,不過我會盡可能地嘗試一下。然而,既然你是唯一回答我會繼續並將其標記爲答案:) – sfaust