スターコンバーターを使用して相対的なサイズのリストビュー列を作成していますが、現在の問題は、スクロールバーが表示されているかどうかが考慮されていないことです。次のようなものをコードに追加しようとしました。
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>
セッターは、それが機能するかどうかを確認するだけです...しかし、まったく設定されません