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

ハイパーリンクが再度有効にならないという私の場合の答えを見つけましたが、それがあなたのものに当てはまるかどうかはわかりません:

ハイパーリンクの親コントロールが無効になっている場合 (IsEnabled=false)、バインドされたプロパティの値が変更された場合でも、ハイパーリンクに変更が通知されないことがわかりました。たとえば、IsEnabledChanged は発生しません。

私の解決策は、祖先コントロールを無効にしないように Xaml を変更することでした (これにより、ハイパーリンクの親が無効になりました)。親 (TextBlock) が常に有効になっているため、ハイパーリンクが常に適切に更新されるようになりました。

(IsEnabled バインディングが Controls とは異なる動作をすることに少し悩んでおり、祖先を有効のままにしておくことができなかった場合にどうすればよいかわかりません...しかし、少なくともこれにより、私がしていた問題を理解できます持っているので、回避させてください。)

詳細: WPF 3.5 SP1

于 2010-12-14T23:40:49.527 に答える
0

それだけではありませんHyperLinks。より具体的には、WPFでTextBlockラップするために使用するのはもちろんのことです。HyperLinkこれにより、同じ問題が発生します。

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

設定で直ると思っIsEnabled="True"ていたのですが、そうでもないようです。

簡単な解決策は、StackPanelwithを使用することですOrientation="Horizontal"

于 2012-10-17T00:30:55.480 に答える