Обнаружена циклическая ссылка при оценке свойства ThemeStyle для элемента 'System.Windows.Controls.TextBlock' - PullRequest
0 голосов
/ 09 октября 2018

У меня есть простое WPF-приложение, которое показывает коллекцию строк в ListView.При наведении на строку появляется всплывающая подсказка с текстом:

enter image description here

После появления всплывающей подсказки и использования колесика мыши для вертикальной прокрутки System.InvalidOperationException с этим сообщением выдается

Обнаружена циклическая ссылка при оценке свойства ThemeStyle для элемента 'System.Windows.Controls.TextBlock'

XAML содержит ListView,со стилем, который показывает ToolTip для каждой строки:

<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>

Показанные данные поступают для ObservableCollection , который установлен в конструкторе MainWindow

public MainWindow()
{
        InitializeComponent();
        this.DataContext = observableCollection;
        for (int i = 0; i < 30; i++)
        {
            observableCollection.Add($"item{i}");
        }
}

Чтобы лучше увидеть содержание исключения, я добавил DispatcherUnhandledException -хендлер:

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;
}

В чем причина проблемы?Пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 09 октября 2018

Эта проблема возникает, потому что стиль не только применяется к TextBlocks ListView, он также применяется к TextBlock в ToolTip !!Это добавит всплывающую подсказку к текстовому блоку, содержащемуся во всплывающей подсказке.Поэтому этот цикл происходит.

Это можно исправить следующим образом:

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

Таким образом, стиль больше не применял всплывающую подсказку к текстовому блоку, содержащемуся во всплывающей подсказке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...