C# 在treeview中切换按钮样式不起作用

C# 在treeview中切换按钮样式不起作用,c#,wpf,xaml,treeview,C#,Wpf,Xaml,Treeview,我有一个带桶和零件的树视图。除了一个功能外,一切看起来都很棒。bucket上的属性(bool IsEditable)允许用户在该节点的树视图中打开或关闭编辑。但由于某些原因,当wpf在树视图中显示Bucket集合时,togglebuttons不会显示正确的文本 这是我的xaml: <Style TargetType="{x:Type ToggleButton}" x:Key="Editor"> <Style.Triggers>

我有一个带桶和零件的树视图。除了一个功能外,一切看起来都很棒。bucket上的属性(bool IsEditable)允许用户在该节点的树视图中打开或关闭编辑。但由于某些原因,当wpf在树视图中显示Bucket集合时,togglebuttons不会显示正确的文本 这是我的xaml:

    <Style TargetType="{x:Type ToggleButton}" x:Key="Editor">
        <Style.Triggers>
            <Trigger Property="IsChecked" Value="False">
                <Setter Property="Content">
                    <Setter.Value>
                        <TextBlock Text="Edit"/>
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="Content">
                    <Setter.Value>
                        <TextBlock Text="Done"/>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>

    <DataTemplate x:Key="HierarchialItemTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding BucketQty, UpdateSourceTrigger=PropertyChanged}"/>
            <TextBlock Text=" "/>
            <TextBlock Text="{Binding PartNum}"/>
        </StackPanel>
    </DataTemplate>

    <DataTemplate x:Key="DisplayBucket">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Sequence}"/>
            <TextBlock Text=" "/>
            <TextBlock Text="{Binding Description}"/>
            <ToggleButton IsChecked="{Binding IsEditable}" Width="25" Style="{StaticResource Editor}"/>
        </StackPanel>
    </DataTemplate>

    <DataTemplate x:Key="EditBucket">
        <StackPanel Orientation="Horizontal">
            <TextBox Text="{Binding Sequence}"/>
            <TextBlock Text=" "/>
            <TextBox Text="{Binding Description}"/>
            <ToggleButton IsChecked="{Binding IsEditable}" Width="25" Style="{StaticResource Editor}"/>
        </StackPanel>
    </DataTemplate>

    <HierarchicalDataTemplate x:Key="TreeTemplate"
                              DataType="{x:Type domain:Bucket}" 
                              ItemsSource="{Binding Parts}"
                              ItemTemplate="{StaticResource HierarchialItemTemplate}"
                              >
        <ContentPresenter Content="{Binding}"
                          Style="{DynamicResource TreeNodeStyle}"/>
    </HierarchicalDataTemplate>

    <Style TargetType="{x:Type ContentPresenter}" x:Key="TreeNodeStyle">
        <Setter Property="ContentTemplate" Value="{StaticResource DisplayBucket}"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsEditable}" Value="True">
                <Setter Property="ContentTemplate" Value="{StaticResource EditBucket}"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

以上是window.resources。在网格中是

            <TreeView x:Name="Buckets"
                  ItemsSource="{Binding Model.Job.Buckets}"
                  ItemTemplate="{StaticResource TreeTemplate}"
                  >

因此,无论出于什么原因,当我添加节点时,我都会得到一个带有切换按钮的bucket,但是切换按钮文本只显示最后添加的节点。如果单击切换按钮,文本将从上一个切换按钮中消失,并显示在刚刚单击的按钮中。其效果与此人的经历相似,但我不知道回答问题的人在说什么


有什么想法吗?

您有两种选择(从最不引人注目到最引人注目):

1) 内容


2) 内容模板


3) 控制模板


您的方法不起作用的原因是TextBlock控件只创建了一次(即不作为模板的一部分创建-
ControlTemplate
DataTemplate