代码之家  ›  专栏  ›  技术社区  ›  Psytronic

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

  •  12
  • Psytronic  · 技术社区  · 15 年前

    我有一个包含listbox的tabitem,它有一个我的feeds类的obeservable集合作为它的item源。当我刷新/加载提要到集合中时,我想禁用主窗口,以便用户在运行此进程时不能单击其他内容。所以我设定 tbCtrl.isEnabled=false; 到窗体上的“我的选项卡”控件。然后将事件处理程序分配给在加载所有提要之后触发的自定义完成事件。

    这一切都很好,但是当前显示在tab控件上的结果的超链接永远不会被重新启用(也不会因为列表框的大小而使后面的几个不可见)。所有其他的结果都很好,其他选项卡上的结果也很好。

    我试过打电话 InvalidateVisual 在一切都完成后,在tab控件上,查看这是否会产生影响,但似乎不会导致任何更改。

    我可以理解,如果它是所有的超链接,或只是目前显示的,但我不明白为什么那些是滚动出来的也不工作。

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

    3 回复  |  直到 11 年前
        1
  •  6
  •   Daryn Malkus    14 年前

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

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

    我的解决方案是将xaml更改为不再禁用祖先控件(这将导致超链接的父控件被禁用)。在父(文本块)始终启用的情况下,超链接将始终正确更新。

    (我有点担心isenabled绑定的行为与控件不同,我不确定如果我不能让祖先保持启用状态,我会怎么做……但至少这能让我理解我所面临的问题,并让我解决它。)

    详细信息:WPF 3.5 SP1

        2
  •  13
  •   HelloSam    14 年前

    我碰到了同样的问题。

    我所做的是将hyperlink的isenabled绑定到父节点,并将其放到app全局资源中。

    <Style TargetType="{x:Type Hyperlink}">
        <Setter Property="IsEnabled" Value="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}}" />
    </Style>
    
        3
  •  0
  •   Simon_Weaver    12 年前

    不仅仅是 HyperLinks . 似乎更具体 TextBlock 你用什么来包装 HyperLink 在WPF中。这将给出相同的问题:

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

    我希望设定 IsEnabled="True" 会解决的,但似乎没有。

    简单的解决方法是使用 StackPanel 具有 Orientation="Horizontal"