2012-05-09 4 views
0

バインドされたアイテムに応じて - データを表示するために異なるデータテンプレートを使用します。今私はまた、ツリービュー自体の動作/スタイルを変更する必要があります。オブジェクトのプロパティに応じてアイテムのスタイルを切り替えることは可能ですか?今のところは、指定された唯一の一つだ: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> 

EDIT秒スタイルを作成したいと思います:

を追加しましたプロパティに基づいてItemContainerStyleの切り替えをトリガーしますが、私は問題は私がhieratchicalデータテンプレートを使用していると思います。 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

?あなたが何を記述するかによって、targetnameを持つプロパティをtreeviewに変更するトリガを設定し、changepropertyaction/datatriggerを使ってItemContainerStyleを即座に反転させることができましたが、いくつかのコードを提供しようとする前にもう少し詳しい情報が必要でした。 –

+0

trueの場合は1つのテンプレートをトリガする必要があり、falseの場合は別のテンプレートとなるプロパティ 'IsFolder'があるとします。これはWPFではなくSilverlightです – katit

答えて

0

私が正しく理解していればあなたはスタイルがプロパティの値に基づいて動的に変更したいとあなたは、これが与えられたスタイルを参照するページのeveryitemsでグローバルに実行することがしたいですか?

この場合、私はExpression Blend内のストーリーボードと状態を調べることをお勧めします。私はあなたの記述にブレンドについて言及していません。あなたはそれを使用していますか?ツリービューには、カスタマイズ可能なものと難しいものがあります。先週、ツリービュー内でネストされたハイパーリンクが効果的にフォントの色を変更できないという問題がありました。私はおそらくデザインにもっと多くの時間を費やすことができましたが、代わりにデザインの意図を変えました。

Blend for Silverlight 5のプレビュー版は、私のインストールに従って2013年6月まで無料です。スタイルテンプレートの選択を決定するであろうどのようなオブジェクトプロパティ http://www.microsoft.com/en-us/download/details.aspx?id=9503

幸運、

関連する問題