Гиперссылки остаются неактивными после установки isEnabled = true для родительского элемента управления. - PullRequest
12 голосов
/ 23 марта 2010

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

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

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

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

Image of Issue

Ответы [ 3 ]

13 голосов
/ 02 июня 2011

Я столкнулся с той же проблемой.

Я привязал IsEnabled HyperLink к родителю и поместил его в глобальный ресурс приложения.

<Style TargetType="{x:Type Hyperlink}">
    <Setter Property="IsEnabled" Value="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}}" />
</Style>
6 голосов
/ 15 декабря 2010

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

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

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

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

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

0 голосов
/ 17 октября 2012

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

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

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

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

...