2012-05-09 17 views
0

取決於綁定項目 - 我使用不同的數據模板來顯示數據。現在我還需要修改treeview本身的行爲/風格。是否可以根據對象屬性切換項目的樣式?現在它是唯一一個指定:ItemContainerStyle="{StaticResource TreeViewItemStyleFolder}"具有多個TreeViewItemStyle的Silverlight樹形視圖

我想創建第二個樣式TreeViewItemStyleDocument

當前XAML(可自定義風格和模板選擇)

<sdk:TreeView ItemsSource="{Binding Items}" 
         Grid.Row="1" 
         Style="{StaticResource TreeViewStyle1}" 
         ItemContainerStyle="{StaticResource TreeViewItemStyleFolder}" 
         > 
      <sdk:TreeView.ItemTemplate> 
       <sdk:HierarchicalDataTemplate ItemsSource="{Binding SubItems}"> 
        <DocumentManagement:DocumentTreeViewItemTemplateSelector 
         Content="{Binding}"> 
         <DocumentManagement:DocumentTreeViewItemTemplateSelector.FolderTemplate> 
          <DataTemplate> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="24" /> 
             <ColumnDefinition Width="*" /> 
            </Grid.ColumnDefinitions> 

            <!-- FOLDER ICON AND CAPTION --> 
            <Image Source="{Binding IconSource}" Width="24" Height="24" /> 
            <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" 
            Grid.Column="1" Margin="5,0" 
            Text="{Binding Folder.FolderId}" FontSize="12" Foreground="#2C2C2C" /> 
           </Grid> 
          </DataTemplate> 
         </DocumentManagement:DocumentTreeViewItemTemplateSelector.FolderTemplate> 
         <DocumentManagement:DocumentTreeViewItemTemplateSelector.DocumentTemplate> 
          <DataTemplate> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="24" /> 
             <ColumnDefinition Width="*" /> 
            </Grid.ColumnDefinitions> 
            <StackPanel Grid.Column="1" Orientation="Horizontal"> 
             <TextBlock FontSize="10" Foreground="#2C2C2C"> 
              <Run Text="Added by" /> 
              <Run Text="{Binding Document.MEMUser.UserName}" /> 
              <Run Text=" on " /> 
              <Run Text="{Binding CreatedOn, Converter={StaticResource DateTimeToStringConverter}}" /> 
             </TextBlock>           
             <!--BIND COMMANDS TO PARENT ViewModel to process operations--> 
             <Button Content="Delete" Command="{Binding DataContext.DeleteCommand, ElementName=LayoutRoot}" CommandParameter="{Binding}" /> 
             <Button Content="Download" Command="{Binding DataContext.DownloadCommand, ElementName=LayoutRoot}" CommandParameter="{Binding}" /> 
            </StackPanel> 
           </Grid> 
          </DataTemplate> 
         </DocumentManagement:DocumentTreeViewItemTemplateSelector.DocumentTemplate> 
        </DocumentManagement:DocumentTreeViewItemTemplateSelector> 
       </sdk:HierarchicalDataTemplate> 
      </sdk:TreeView.ItemTemplate> 
     </sdk:TreeView> 

編輯

添加觸發器根據屬性切換ItemContainerStyle,但我認爲問題在於我使用的是文本數據模板。如果我在IsFolder屬性上放置斷點 - 沒有源對象。

<sdk:TreeView x:Name="DocumentsTreeView" ItemsSource="{Binding Items}" 
         Grid.Row="1" 
         Style="{StaticResource TreeViewStyleTransparent}"> 
<!--   ItemContainerStyle="{StaticResource TreeViewItemStyleFolders}"--> 
      <i:Interaction.Triggers> 
       <ei:DataTrigger Value="False" Binding="{Binding IsFolder}"> 
        <ei:ChangePropertyAction TargetName="DocumentTreeView" PropertyName="ItemContainerStyle"     
              Value="{StaticResource TreeViewItemStyleFolders}" /> 
       </ei:DataTrigger> 
       <ei:DataTrigger Value="True" Binding="{Binding IsFolder}"> 
        <ei:ChangePropertyAction TargetName="DocumentTreeView" PropertyName="ItemContainerStyle" 
              Value="{StaticResource TreeViewItemStyleDocuments}" /> 
       </ei:DataTrigger> 
      </i:Interaction.Triggers> 
      <sdk:TreeView.ItemTemplate> 
       <sdk:HierarchicalDataTemplate ItemsSource="{Binding SubItems}"> 

        <DocumentManagement:DocumentTreeViewItemTemplateSelector 
         Content="{Binding}"> 
         <DocumentManagement:DocumentTreeViewItemTemplateSelector.FolderTemplate> 
          <DataTemplate> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="24" /> 
             <ColumnDefinition Width="*" /> 
            </Grid.ColumnDefinitions> 

            <!-- FOLDER ICON AND CAPTION --> 
            <Image Source="{Binding IconSource}" Width="24" Height="24" /> 
            <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" 
            Grid.Column="1" Margin="5,0" 
            Text="{Binding Folder.FolderId}" FontSize="12" Foreground="#2C2C2C" /> 
           </Grid> 
          </DataTemplate> 
         </DocumentManagement:DocumentTreeViewItemTemplateSelector.FolderTemplate> 
         <DocumentManagement:DocumentTreeViewItemTemplateSelector.DocumentTemplate> 
          <DataTemplate> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="24" /> 
             <ColumnDefinition Width="*" /> 
            </Grid.ColumnDefinitions> 
            <StackPanel Grid.Column="1" Orientation="Horizontal"> 
             <TextBlock FontSize="10" Foreground="#2C2C2C"> 
              <Run Text="Added by" /> 
              <Run Text="{Binding Document.MEMUser.UserName}" /> 
              <Run Text="on" /> 
              <Run Text="{Binding Document.CreatedOn, Converter={StaticResource DateTimeToStringConverter}}" /> 
             </TextBlock>           
             <!--BIND COMMANDS TO PARENT ViewModel to process operations--> 
             <Button Content="Delete" Command="{Binding DataContext.DeleteCommand, ElementName=LayoutRoot}" CommandParameter="{Binding}" /> 
             <Button Content="Download" Command="{Binding DataContext.DownloadCommand, ElementName=LayoutRoot}" CommandParameter="{Binding}" /> 
            </StackPanel> 
           </Grid> 
          </DataTemplate> 
         </DocumentManagement:DocumentTreeViewItemTemplateSelector.DocumentTemplate> 
        </DocumentManagement:DocumentTreeViewItemTemplateSelector> 
       </sdk:HierarchicalDataTemplate> 
      </sdk:TreeView.ItemTemplate> 
     </sdk:TreeView> 
+0

什麼對象屬性將決定樣式模板的選擇呢?從你所描述的你可以設置一個觸發器,將目標名稱屬性更改爲你的樹形視圖,並且可能會使用changepropertyction/datatrigger隨時翻轉你的ItemContainerStyle,但可能需要更多信息,然後再嘗試提供一些代碼。 –

+0

假設它是屬性'IsFolder',當true應該觸發一個模板而false將是另一個模板。請記住,這是Silverlight,而不是WPF – katit

回答

0

如果我理解正確的話,你要的風格來改變動態基礎屬性值,你想這對在全球範圍內引用給定樣式在頁面上everyitems進行?

如果是這種情況,我建議您查看Expression Blend中的故事板和狀態。我沒有看到你在描述中提到Blend。你在使用它嗎?樹視圖有很多可以自定義的項目,有些項目更難。上週我有一個問題,我嵌套在樹視圖中的超鏈接無法有效地改變字體顏色。我可能會花更多時間在設計上,但我改變了設計意圖。

根據我的安裝,Blend for Silverlight 5的預覽版在2013年6月前是免費的。 http://www.microsoft.com/en-us/download/details.aspx?id=9503

祝你好運,