将isEnabled = true设置为父控件后,超链接保持不活动状态

时间:2010-03-23 11:26:40

标签: wpf hyperlink isenabled

我有一个TabItem连接一个列表框,它有一个可观察的我的feed类集合作为它的项目源。当我将提要刷新/加载到集合中时,我想要禁用主窗口,以便用户在此进程运行时无法单击其他内容。所以我将tbCtrl.isEnabled=false;设置为表单上的选项卡控件。然后将事件处理程序分配给自定义完成事件,该事件在加载所有订阅源后触发。

这一切都运行正常,但是当前显示在选项卡控件上的结果的超链接永远不会被重新启用(由于列表框大小,接下来的几个也不在视图之外)。所有其他结果进一步下降都很好,其他选项卡上的结果也是如此。

我已经尝试在所有内容完成后在选项卡控件上调用InvalidateVisual,看看是否会产生影响,但这似乎不会导致任何更改。

我能理解它是否所有超链接都在做,或者只是当前显示的那些,但我不明白为什么那些不滚动的也不起作用。

Image of Issue http://i42.tinypic.com/5wm0qx.jpg

3 个答案:

答案 0 :(得分:13)

我遇到了同样的问题。

我所做的是将HyperLink的IsEnabled绑定到父级,并将其放在App全局资源中。

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

答案 1 :(得分:6)

我发现我的超链接案例的答案没有重新启用,不确定它是否适用于你的:

我发现当禁用Hyperlink的父控件(IsEnabled = false)时,超链接不会收到有关更改的通知,例如即使绑定属性更改值,也不会触发IsEnabledChanged。

我的解决方案是将我的Xaml更改为不再禁用祖先控件(导致Hyperlink的父级被禁用)。在始终启用父(TextBlock)的情况下,现在Hyperlink始终正确更新。

(我有点担心IsEnabled绑定的行为与Controls不同,我不知道如果我不能让祖先启用我会做什么......但至少这让我理解我遇到的问题,让我解决它。)

详细信息:WPF 3.5 SP1

答案 2 :(得分:0)

这不仅仅是HyperLinks。它似乎更具体地TextBlock当然是你用来在WPF中包装HyperLink的。这会产生同样的问题:

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

我希望设置IsEnabled="True"可以修复它,但似乎没有。

简单的解决方案是使用StackPanelOrientation="Horizontal"

相关问题