2011-08-03 66 views
0

下面的代碼會拋出一個異常:WPF - 如何使用DataTemplate中的treeViewItems

<TreeView 
      ItemsSource="{Binding TreeRootInstance}" 
      x:Name="Htree" 
      ItemTemplate="CellTemplate" 
      SelectedItemChanged="HTree_OnSelectedItemChanged" 
      KeyDown="HTree_KeyDown"> 

      <TreeView.Resources> 

      <DataTemplate x:Key="CellTemplate"> 
        <Border> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="auto"/> 
           <ColumnDefinition Width="auto"/> 
          </Grid.ColumnDefinitions> 

          <ToggleButton x:Name="Expander" 
             HorizontalAlignment="Right" 
             Focusable="False" 
             Grid.Column="1" 
             IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource AncestorType={x:Type vw:TreeViewItem}}}" 
             ClickMode="Press"/> 
          <TextBlock 
           Text="{Binding Name}" 
           Grid.Column="0" /> 


         </Grid> 
        </Border> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding Path=HasItems, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" Value="False"> 
          <Setter TargetName="Expander" Property="Visibility" Value="Hidden"/> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 



       <Style TargetType="{x:Type TreeViewItem}" x:Key="aa"> 
        <Setter Property="IsTabStop" Value="True"/> 
        <Setter Property="TabIndex" Value="0"/> 
        <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded,Mode=TwoWay}"/> 
        <Setter Property="ItemsSource" Value="{Binding Children}"/> 
        <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
          <StackPanel> 
           <Border Name="Bd"> 

           </Border> 
           <ItemsPresenter x:Name="ItemsHost" /> 
          </StackPanel> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsExpanded" Value="false"> 
            <Setter TargetName="ItemsHost" 
              Property="Visibility" 
              Value="Collapsed"/> 
           </Trigger> 

          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 


      <Style TargetType="{x:Type TreeView}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TreeView}"> 
          <Border BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}"> 

          </Border> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
        <Setter Property="ItemContainerStyle" Value="{StaticResource aa}" /> 
      </Style> 

      </TreeView.Resources> 
    </TreeView> 

(我省略了一些代碼,但主要hirerchy仍然存在...) 例外情況是在ItemsControl.ItemTemplate上xaml解析異常。

你能告訴我如何使這段代碼工作?

感謝, 李

+2

什麼是XamlParseException的內部異常? –

+0

只是「ItemsControl.ItemTemplate」拋出一個異常「 – user429400

+0

爲什麼vw:前綴在那裏?這是一個非標準的TreeView? –

回答

2

不能使用普通的字符串作爲一個資源定位器,你需要使用一個StaticResource標記擴展,即ItemTempate="{StaticResource CellTemplate}"

+0

THanks,但現在我得到另一種類型的異常(在同一行) - 再次,一個xaml解析錯誤,這次「提供值」System.Windows.StaticResourceExtension「拋出一個異常」 – user429400

+0

移動你的TreeView.Resources就在您的openeing TreeView標籤下面;所有資源需要在被引用之前進行聲明。 – sellmeadog

2

ItemTemplate模板行應爲:

ItemTemplate="{StaticResource CellTemplate}"