0

次のxamlで行うように、すべての「TreeViewItem」スタイルにプログラムで(コード/xamlではなく)新しいDataTriggerを割り当てたいと思います。

トリガーを定義したコードを (xaml の下で) 実行しましたが、「ItemContainerStyle」は null です。この関数は Window Initialize イベントで呼び出されます。

誰かが私が間違っていることを知っていますか?

編集

問題の一部が見つかりました。以下のコード サンプルで定義されているように、スタイルを "Resource" セクションから "ItemContainerStyle" セクションに移動しました。このように、スタイルは引き続き適用され、コードの TReeView.ItemContainerStyle プロパティからスタイルにアクセスできます。しかし、コードで背景の色のようなTreeViewItemの選択されたスタイルを取得する方法はまだわかりません??

私はxamlを持っています:

                <TreeView Name="TreeViewSelectScopeStudy" MinHeight="24" Margin="7" 
                    ItemsSource="{Binding Path=TvItemRootPssTreeViewRoot.ChildsView}" Height="Auto"
                    VerticalAlignment="Stretch"
                    VirtualizingStackPanel.IsVirtualizing="True"
                    VirtualizingStackPanel.VirtualizationMode="Recycling">
                <TreeView.Resources>
                    <Style TargetType="TreeViewItem">
                        <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=IsHilighted}" Value="true">
                                <!--<Setter Property="Background" Value="SlateBlue"></Setter>-->
                                <Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>

私はそのコードを持っています:

    public static void EnableMultipleSelection(TreeView treeView)
    {
        if (!_isMultiSelectTreeViewLeftButtonHandlerRegistered)
        {
            EventManager.RegisterClassHandler(typeof(TreeViewItem), UIElement.MouseDownEvent,
                                                             new MouseButtonEventHandler(TreeViewMouseDownGlobal));
            _isMultiSelectTreeViewLeftButtonHandlerRegistered = true;
        }

        DataTrigger dataTrigger = new DataTrigger();
        dataTrigger.Binding = new Binding("IsHilighted");
        dataTrigger.Value = true;
        dataTrigger.Setters.Add(new Setter(TreeViewItem.BackgroundProperty, new SolidColorBrush(Colors.Brown)));

        treeView.ItemContainerStyle.Triggers.Add(dataTrigger);

編集されたコード:

 <TreeView Name="TreeViewSelectScopeStudy" MinHeight="24" Margin="7" 
                ItemsSource="{Binding Path=TvItemRootPssTreeViewRoot.ChildsView}" Height="Auto"
                VerticalAlignment="Stretch"
                VirtualizingStackPanel.IsVirtualizing="True"
                VirtualizingStackPanel.VirtualizationMode="Recycling"> 

            <TreeView.ItemContainerStyle>
                <Style TargetType="TreeViewItem">
                    <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=IsHilighted}" Value="true">
                            <Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TreeView.ItemContainerStyle>

            <TreeView.Resources>
                <!--<Style TargetType="TreeViewItem">
                    <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=IsHilighted}" Value="true">
                            <Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>-->
4

1 に答える 1

0

テンプレートが適用される前に Style.Trigger を設定しようとしているようです。ターゲットにしている が完全にロードされた後にトリガーを適用すると、が null ではなくなっFrameWorkElementていることがわかるでしょう。ItemStyleContainer

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.loaded.aspx

ビジュアル ツリーがレンダリングされた後に呼び出されるので、ItemStyleContainer が設定された後に実装OnApplyTemplateする必要があります。FrameworkElement

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.onapplytemplate.aspx

于 2013-08-05T17:51:51.143 に答える