我有一个TabItem连接一个列表框,它有一个可观察的我的feed类集合作为它的项目源。当我将提要刷新/加载到集合中时,我想要禁用主窗口,以便用户在此进程运行时无法单击其他内容。所以我将tbCtrl.isEnabled=false;
设置为表单上的选项卡控件。然后将事件处理程序分配给自定义完成事件,该事件在加载所有订阅源后触发。
这一切都运行正常,但是当前显示在选项卡控件上的结果的超链接永远不会被重新启用(由于列表框大小,接下来的几个也不在视图之外)。所有其他结果进一步下降都很好,其他选项卡上的结果也是如此。
我已经尝试在所有内容完成后在选项卡控件上调用InvalidateVisual
,看看是否会产生影响,但这似乎不会导致任何更改。
我能理解它是否所有超链接都在做,或者只是当前显示的那些,但我不明白为什么那些不滚动的也不起作用。
答案 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"
可以修复它,但似乎没有。
简单的解决方案是使用StackPanel
和Orientation="Horizontal"