13

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

这一切都很好,但是当前显示在选项卡控件上的结果的超链接永远不会重新启用(接下来的几个由于列表框大小而看不见)。所有其他结果都很好,其他选项卡上的结果也是如此。

一切都完成后,我尝试调用InvalidateVisual选项卡控件,看看这是否有所不同,但这似乎不会导致任何变化。

如果是所有超链接都在做这件事,或者只是当前显示的那些,我可以理解,但我不明白为什么那些不滚动的链接也不起作用。

问题图片

4

3 回答 3

13

我遇到了同样的问题。

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

<Style TargetType="{x:Type Hyperlink}">
    <Setter Property="IsEnabled" Value="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}}" />
</Style>
于 2011-06-02T14:11:22.130 回答
6

我找到了未重新启用超链接的情况的答案,不确定它是否适用于您的情况:

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

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

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

详细信息:WPF 3.5 SP1

于 2010-12-14T23:40:49.527 回答
0

这不仅仅是HyperLinks。似乎更具体地说TextBlock,您使用哪个当然是HyperLink在 WPF 中包装 a 的。这将给出同样的问题:

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

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

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

于 2012-10-17T00:30:55.480 回答