超链接的IsEnabled = true设置于母公司控制后停留不活跃
题
我有一个TabItem的contanining一个列表框,里面有我的饲料类作为其项目源的obeservable集合。当我刷新/加载到饲料我想禁用主窗口,使得用户不能去点击其他的事情,而这个进程正在运行的集合。所以我设置tbCtrl.isEnabled=false;
到表单上我的标签控制。然后,事件处理程序分配给所有的饲料都加载之后触发的自定义事件结束。
这一切工作正常,但是,对于当前正在显示选项卡控件从未被重新启用(也没有未来几年它们的观点出来,由于列表框的大小)结果的超链接。所有其他结果进一步向下都很好,因为是其他选项卡上的结果。
我打过电话选项卡控件InvalidateVisual
一切都完了之后,看看是否有差别,但似乎并没有引起任何变化。
我能理解,如果它是所有超链接这样做,或者当前显示的只是那些,但我不明白为什么那些它们滚动出来的也不工作。
解决方案
我发现我的超级链接没有得到重新启用情况下的答案,它是否适用于你不知道:
当超链接的父控制被禁用(的IsEnabled = false),则超链接不会收到通知的变化,例如的我发现IsEnabledChanged不会被解雇,即使绑定属性值改变。
我的解决办法是我的Xaml改变为不再禁用祖先控制(这是导致超链接的父是禁用)。与总是使能的父(TextBlock的),现在超链接正确地更新总是
(我有点困扰的的IsEnabled结合行为不同于控制做的,我不知道如果我不能离开启用祖先我会做什么......但至少这让我体会到了发布我有,并让我解决它。)
详细说明:WPF 3.5 SP1
其他提示
我打的是同样的问题。
我所做的是超链接的IsEnabled绑定到父,也放到了一个App全球资源。
<Style TargetType="{x:Type Hyperlink}">
<Setter Property="IsEnabled" Value="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}}" />
</Style>
这不只是HyperLinks
。这似乎是更具体TextBlock
这当然是你用什么来包装一个WPF HyperLink
。这将给予同样的问题:
<TextBlock>
<Run Text="Barcode:"/>
<InlineUIContainer BaselineAlignment="Center">
<TextBox Text="{Binding OriginalPackage.BarcodeNumber}" />
</InlineUIContainer>
</TextBlock>
我希望设置IsEnabled="True"
将修复它,但它似乎没有没有。
在简单的解决方案是使用一个与StackPanel
Orientation="Horizontal"