Подтвердить что ты не робот

Гиперссылки остаются неактивными после установки isEnabled = true для родительского элемента управления

У меня есть TabItem, включающий в себя список, который имеет наблюдаемую коллекцию моего класса каналов в качестве источника элемента. Когда я обновляю/загружаю каналы в коллекцию, я хочу отключить главное окно, чтобы пользователь не мог щелкать другие объекты во время выполнения этого процесса. Поэтому я установил tbCtrl.isEnabled=false; к моей вкладке управления в форме. Затем назначьте обработчик события для пользовательского события завершения, которое запускается после загрузки всех каналов.

Это все работает нормально, однако гиперссылки для результатов, которые в настоящее время отображаются на элементе управления вкладками, никогда не включаются повторно (равно как и следующие несколько, которые не отображаются из-за размера списка). Все остальные результаты ниже, также как и результаты на другой вкладке.

Я попытался вызвать InvalidateVisual на вкладке после того, как все будет завершено, чтобы увидеть, если это имеет значение, но это, кажется, не вызывает каких-либо изменений.

Я мог бы понять это, если бы это делали все гиперссылки, или только те, которые отображаются в данный момент, но я не понимаю, почему те, которые находятся вне прокрутки, также не работают.

Image of Issue

4b9b3361

Ответ 1

Я нашел ответ для моего случая, когда гиперссылка не получила повторного включения, не уверен, что она применима к вашей:

Я обнаружил, что, когда родительский элемент управления Hyperlink отключен (IsEnabled = false), Hyperlink не получит уведомления об изменениях, например. IsEnabledChanged не запускается, даже если свойство bound изменяет значение.

Мое решение состояло в том, чтобы изменить мой Xaml, чтобы больше не отключать элемент управления предком (который вызывал отключение родителя Hyperlink). Поскольку родительский (TextBlock) всегда включен, теперь Hyperlink обновляется правильно.

(Я немного обеспокоен тем, что привязка IsEnabled ведет себя иначе, чем Controls, и я не уверен, что бы я сделал, если бы я не мог оставить включенного предка... но по крайней мере это позволяет мне понять вопрос, который у меня был, и позволяет мне обойти его.)

Подробности: WPF 3.5 SP1

Ответ 2

Я попал в ту же проблему.

То, что я сделал, - связать HyperLink IsEnabled с родителем и поместить его в глобальный ресурс приложения.

<Style TargetType="{x:Type Hyperlink}">
    <Setter Property="IsEnabled" Value="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}}" />
</Style>

Ответ 3

Это не просто HyperLinks. По-видимому, это более точно TextBlock, который, конечно же, используется для переноса HyperLink в WPF. Это даст ту же проблему:

<TextBlock>
    <Run Text="Barcode:"/>
    <InlineUIContainer BaselineAlignment="Center">
        <TextBox Text="{Binding OriginalPackage.BarcodeNumber}" />
    </InlineUIContainer>
</TextBlock>

Я надеялся, что установка IsEnabled="True" исправит его, но это не похоже на.

Простое решение - использовать StackPanel с Orientation="Horizontal"