TreeViewItems在wpf TreeView

时间:2018-03-30 15:57:46

标签: c# wpf treeview

我有一个WPF应用程序,它会创建一些TreeViewItems并在启动期间将它们添加到我的TreeView。我遇到的问题是,当加载窗口时,所有TreeViewItems都有相同的标题文本。在应用程序打开时向TreeView添加新项目时遇到了同样的问题,但在我将项目添加到UpdateLayout()后添加TreeView我能够解决该问题。 treeView.Items,Add(item)。当我尝试在启动期间添加项目时执行相同的修复时问题未得到修复。是否存在UpdateLayout()方法的问题,即不允许它更新每个项目以使它们具有不同的标题。

我的TreeView使用的ItemTemplate定义如下。

<TreeView.ItemTemplate>
                        <DataTemplate x:Name="datatemplate">
                            <StackPanel x:Name="stackpanel" Orientation="Horizontal" DataContext="{StaticResource ItemHeader}" >
                                <CheckBox x:Name="checkbox_treeview" IsChecked="{Binding Path=ischecked, Mode=OneWay}" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" Checked="treeView_AfterCheck" Unchecked="treeView_AfterCheck"/>
                                <Image x:Name="image_treeview" Width="16"/>
                                <local:WPFEditableTextBlock x:Name="label_TreeView" Text="{Binding Path=headertext}" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}"  LostFocus="treeView_AfterLabelEdit"/>
                            </StackPanel>
                        </DataTemplate>
                    </TreeView.ItemTemplate>

当我创建要添加到TreeViewItems的新myTreeView时,我创建了一个新的TreeViewItem,并为其添加了Style,其中包含Template

<Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem"> <!--Selected Item Style -->
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel x:Name="stackpanel" Orientation="Horizontal" DataContext="{StaticResource ItemHeader}" >
                            <CheckBox x:Name="checkbox_treeview" IsChecked="{Binding Path=ischecked, Mode=OneWay}" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" Checked="treeView_AfterCheck" Unchecked="treeView_AfterCheck"/>
                            <Image x:Name="image_treeview" Source="node.png" Width="16" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" />
                            <local:WPFEditableTextBlock x:Name="label_TreeView"  Text="{Binding Path=headertext}" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}"  LostFocus="treeView_AfterLabelEdit"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
            <EventSetter Event="TreeViewItem.DragOver"  Handler="treeView_DragOver"/>
            <EventSetter Event="TreeViewItem.Drop" Handler="treeView_Drop"/>
            <EventSetter Event="TreeViewItem.MouseMove" Handler="treeView_MouseMove"/>
            <Style.Triggers>
                <Trigger Property="local:TreeViewDropHighlighter.IsPossibleDropTarget" Value="True">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
                </Trigger>
            </Style.Triggers>
        </Style>

此外我的Style绑定到我的ItemHeader类,这是我操纵标题文本的方式。

 public class ItemHeader
{            
    /// <summary>
    /// Gets or sets the header text of the TreeViewItem
    /// </summary>
    public string headertext { get; set; }

    /// <summary>
    /// gets or sets the checkbox for the TreeViewItem
    /// </summary>
    public bool ischecked { get; set; }
}

最后,当我调试时,我查看了将TreeViewItem添加到TreeView的代码,TreeView.Items属性显示标题是不同的文本,但是当显示窗口时它们都有相同的标题文本。

我知道这是一个复杂而奇怪的问题,我可能没有解释得那么好,但我感到非常困难,任何建议都会有所帮助。

0 个答案:

没有答案