C# 评估元素';上的主题样式属性时发现循环引用;System.Windows.Controls.TextBlock';

C# 评估元素';上的主题样式属性时发现循环引用;System.Windows.Controls.TextBlock';,c#,wpf,C#,Wpf,我有一个简单的WPF应用程序,它在ListView中显示一个字符串集合。将鼠标悬停在某一行上时,将显示带有文本的工具提示: 出现工具提示并使用鼠标滚轮垂直滚动后,将引发带有此消息的System.InvalidOperationException 计算元素“System.Windows.Controls.TextBlock”的ThemeStyle属性时找到循环引用 XAML包含一个带有样式的ListView,它为每一行显示工具提示: <Window x:Class="CylicDepend

我有一个简单的WPF应用程序,它在ListView中显示一个字符串集合。将鼠标悬停在某一行上时,将显示带有文本的工具提示:

出现工具提示并使用鼠标滚轮垂直滚动后,将引发带有此消息的System.InvalidOperationException

计算元素“System.Windows.Controls.TextBlock”的ThemeStyle属性时找到循环引用

XAML包含一个带有样式的ListView,它为每一行显示工具提示:

<Window x:Class="CylicDependencyWpfApplication.MainWindow"
...>
    <ListView ItemsSource="{Binding}">
        <ListView.Resources>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="ToolTip">
                    <Setter.Value>
                        <TextBlock>tooltip</TextBlock>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.Resources>
        <ListView.View>
            <GridView>
                <GridViewColumn Width="300" Header="Column1" DisplayMemberBinding="{Binding}"/>
            </GridView>
        </ListView.View>
    </ListView>
</Window>

问题的原因是什么?请帮帮我

出现此问题,因为样式列表不仅应用于ListView的TextBlock,还应用于工具提示中的TextBlock!!这将向工具提示中包含的文本块添加工具提示。因此,这个循环就发生了

这可以通过如下方式进行修复:

    <ListView.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="ToolTip">
                <Setter.Value>
                    <TextBlock ToolTip="">tooltip</TextBlock>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.Resources>

工具提示
这样,样式就不再将工具提示应用于工具提示中包含的文本块

private void App_OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
        Exception ex = e.Exception;
        // System.InvalidOperationException
        string name = ex.GetType().FullName;
        // Cyclic reference found while evaluating the ThemeStyle property on element 'System.Windows.Controls.TextBlock'.
        string message = ex.Message;
}
    <ListView.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="ToolTip">
                <Setter.Value>
                    <TextBlock ToolTip="">tooltip</TextBlock>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.Resources>