0

バインドされたアイテムに応じて、さまざまなデータ テンプレートを使用してデータを表示します。ここで、ツリービュー自体の動作/スタイルも変更する必要があります。オブジェクトのプロパティに応じてアイテムのスタイルを切り替えることはできますか? 現在、指定されているのは 1 つだけです。ItemContainerStyle="{StaticResource TreeViewItemStyleFolder}"

セカンドスタイルを作りたい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>
4

1 に答える 1

0

私が正しく理解している場合、プロパティ値に基づいてスタイルを動的に変更し、指定されたスタイルを参照するページ上のすべてのアイテムでこれをグローバルに実行したいですか?

その場合は、Expression Blend 内のストーリーボードと状態を調べることをお勧めします。説明で Blend について言及していません。使っていますか?ツリービューには、カスタマイズできる多くの項目と、より難しい項目があります。先週、ツリービュー内にネストされたハイパーリンクがフォントの色を効果的に変更できないという問題がありました。もっと時間をかけて設計すればできたかもしれませんが、代わりに設計意図を変更しました。

私のインストールによると、Blend for Silverlight 5 のプレビュー バージョンは 2013 年 6 月まで無料です。 http://www.microsoft.com/en-us/download/details.aspx?id=9503

幸運を、

于 2012-06-04T20:35:36.220 に答える