C# 在WPF中,当EventTrigger源位于页面外部时如何处理';s资源,但Storyboard.TargetName是否在treeview数据模板中?

C# 在WPF中,当EventTrigger源位于页面外部时如何处理';s资源,但Storyboard.TargetName是否在treeview数据模板中?,c#,wpf,treeview,storyboard,C#,Wpf,Treeview,Storyboard,我有一个TreeView,它的是在HierarchycalDataTemplate中定义的 <HierarchicalDataTemplate ItemsSource="{Binding}" x:Key="TreeTemplate"> <StackPanel Orientation="Horizontal"> <TextBlock Name="TextBlockProperty"

我有一个
TreeView
,它的
是在HierarchycalDataTemplate中定义的

 <HierarchicalDataTemplate ItemsSource="{Binding}"
                              x:Key="TreeTemplate">
    <StackPanel Orientation="Horizontal">
        <TextBlock Name="TextBlockProperty" Text="{Binding Name}" Width="110" Foreground="#FF3C3C3C" >
            <TextBlock.Style>
                <Style TargetType="TextBlock">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ModifyType}" Value="AutoDetect">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <SolidColorBrush Color="LightGreen"></SolidColorBrush>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ModifyType}" Value="Prerequisite">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <SolidColorBrush Color="LightSkyBlue"></SolidColorBrush>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ModifyType}" Value="AutoCheckFailed">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <SolidColorBrush Color="Red"></SolidColorBrush>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
        <ContentControl Name="ContentCtrl" Content="{Binding}">
        </ContentControl>
    </StackPanel>
    <HierarchicalDataTemplate.Triggers>
        <DataTrigger Binding="{Binding ControlType}" Value="Text">
            <Setter TargetName="ContentCtrl" Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBox Width="130" Text="{Binding Value}" BorderThickness="0" Background="#FFF8F8F8"></TextBox>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding ControlType}" Value="Choice">
            <Setter TargetName="ContentCtrl" Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <ComboBox Width="130" IsEditable="True" ItemsSource="{Binding ChoiceItems}" Text="{Binding Value}" BorderThickness="0" >
                        </ComboBox>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding ControlType}" Value="Group">
            <Setter TargetName="ContentCtrl" Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock></TextBlock>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
然后像这样调用
情节提要

<Page.Triggers>
    <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="ShowDefaultValue">
        <BeginStoryboard Storyboard="{StaticResource ShowDefault}"/>
    </EventTrigger>
    <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="HideDefaultValue">
        <BeginStoryboard Storyboard="{StaticResource HideDefault}"/>
    </EventTrigger>
</Page.Triggers>
<TextBlock Loaded="TextBoxLoaded"></TextBlock>
 private TextBlock _textBlock;
        private void TextBoxLoaded(object sender, RoutedEventArgs e)
        {
            _textBlock = sender as TextBlock;
        }

有点复杂,但希望你做对了


如有任何帮助或建议,将不胜感激。:)

我不知道你想达到什么目的,所以我必须猜一下你的意思:)

要获取对TextBlock的引用,可以将其附加到加载的事件,如下所示:

<Page.Triggers>
    <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="ShowDefaultValue">
        <BeginStoryboard Storyboard="{StaticResource ShowDefault}"/>
    </EventTrigger>
    <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="HideDefaultValue">
        <BeginStoryboard Storyboard="{StaticResource HideDefault}"/>
    </EventTrigger>
</Page.Triggers>
<TextBlock Loaded="TextBoxLoaded"></TextBlock>
 private TextBlock _textBlock;
        private void TextBoxLoaded(object sender, RoutedEventArgs e)
        {
            _textBlock = sender as TextBlock;
        }

私有文本块_TextBlock;
private void TextBoxLoaded(对象发送方,RoutedEventArgs e)
{
_textBlock=发送方为textBlock;
}
然后单击按钮时,更改TextBlock的属性


通常,对于子模板的每个项目,按钮也应该位于模板中。

好的,我最终通过在两个
之外添加一个
来解决问题。无需更改数据绑定或其他任何内容。

您好,我已更新了我的问题:)希望它能让问题更清楚。