3

スターコンバーターを使用して相対的なサイズのリストビュー列を作成していますが、現在の問題は、スクロールバーが表示されているかどうかが考慮されていないことです。次のようなものをコードに追加しようとしました。

  var scroll = FindVisualChild<ScrollViewer>(listView);
  var offset = 0.0;
  if (scroll.ComputedVerticalScrollBarVisibility == Visibility.Visible)
    offset = SystemParameters.ScrollWidth + 5;

ただし、サイズ変更はスクロールバーの可視性の前に行われ、スクロールは常に として表示されCollapsedます。

だから、私の質問は、列のサイズを適切に変更するにはどうすればよいかということです。にトリガーを追加しようとしましたScrollViewer.ComputedVerticalScrollBarVisibilityが、成功しませんでした。このリンクに基づいてカスタムコードを使用しようとしましたが、現在は常に空白のリストビューになります (ItemsPresenter を使用するリストビューが原因である可能性がありますが、現在はわかりません)。

私が試したリストビューのセットアップは次のとおりです。

<Style x:Key="{x:Type ListView}" TargetType="ListView">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListView">
                <Border Name="Border" BorderThickness="0" BorderBrush="#999999" >
                    <ScrollViewer x:Name="blah" >
                        <ItemsPresenter />
                    </ScrollViewer>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger SourceName="blah" Property="ComputedVerticalScrollBarVisibility" Value="Hidden">
                        <Setter Property="BorderBrush" Value="Aqua"/>
                        <Setter Property="BorderThickness" Value="10"/>
                    </Trigger>
                    <Trigger  SourceName="blah" Property="ComputedVerticalScrollBarVisibility" Value="Collapsed">
                        <Setter Property="BorderBrush" Value="Orange"/>
                        <Setter Property="BorderThickness" Value="10"/>
                    </Trigger>
                    <Trigger SourceName="blah"  Property="ComputedVerticalScrollBarVisibility" Value="Visible">
                        <Setter Property="BorderBrush" Value="Red"/>
                        <Setter Property="BorderThickness" Value="10"/>
                    </Trigger>
                    <Trigger Property="IsGrouping" Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter TargetName="Border" Property="Background" Value="#BBBBBB"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

セッターは、それが機能するかどうかを確認するだけです...しかし、まったく設定されません

4

1 に答える 1

1

私は一種のハックを作成することになりました。かなり長くなる可能性があるため、これが私の最初のブログ投稿です。まだコードをクリーンアップする必要がありますが、他の人に役立つことを願っています

于 2012-07-13T21:12:30.100 に答える