2017-12-26 4 views
0

私はWPF TabItemを持っていますが、時にはScrollBarが存在し、時々存在しないことがあります。スクロールバーが存在するかどうかを検出する方法を見つけようとしています。ここでWPF TabItemにScrollBarがあるかどうかを判断する方法はありますか?

    <TabItem HorizontalAlignment="Stretch" IsSelected="{Binding TabSelectedDoDads, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Stretch" > 
         <TabItem.Header> 
          <TextBlock Text="DoDads" FontWeight="SemiBold" /> 
         </TabItem.Header> 
         <DockPanel VerticalAlignment="Stretch" > 
          <local:ucDoDadViewer x:Name="ucDoDadViewer" IsEnabled="{Binding IsDoDadViewerVisible, Converter={StaticResource bvc}}" /> 
         </DockPanel> 
        </TabItem> 
+0

どこで検出する必要がありますか? /あなたはその情報で何をしていますか? –

+0

スクロールバーが存在するため、TabItemの幅が小さくなり、1つのタブヘッダー行が2行になる可能性があります。その動作は私のユーザーを迷惑にしています。垂直スクロールバーが存在するかどうかわかっていれば、それを考慮に入れて右マージンを調整することができます。 – dev1998

+0

これは役立ちますか:https://stackoverflow.com/questions/17794252/how-to-disable-tab-wrapping-in-the-tab-control-object –

答えて

0

は問題と私がやってしまったかの基本的なコンポーネントの要約です:

Aユーザーコントロールは、時には右に表示される垂直スクロールバーを持っていた、そしてそれがなかった場合、ユーザーコントロールの幅1つのタブヘッダー行が2行になりました。ユーザーはその動作が気に入らなかった。そこで、スクロールバーを考慮して右余白を調整できるように、垂直スクロールバーが存在するかどうかを判断する必要がありました。

UserControlはScrollViewer内にありました。 ScrollViewerには、「ScrollChanged」という名前のイベントがあります。スクロールバーの状態が変わるたびに発生するようです。

私はこれを持っているのEventHandlerで:

 bool isVisible = false; 
     if (gridContentScrollViewer.ComputedVerticalScrollBarVisibility == Visibility.Visible) 
     { 
      isVisible = true; 
     } 
     Messenger.Default.Send<bool>(isVisible, "VerticalScrollInfoRecieved"); 

ユーザーコントロールのためのVewModelはVerticalScrollInfoRecievedメッセージを聞いています。それが到着すると、ScrollBarが表示されているかどうかを考慮してマージンバインディングを更新します。

関連する問題