ScrollViewer
에 ItemsControl
이 포함 된 WPF UserControl
(ElementHost
내부)이 있습니다. HorizontalScrollbarVisibility
은 Auto
으로 설정되므로 스크롤이 필요하지 않으면 ScrollBar
이 숨겨집니다.WPF Scrollviewer ScrollBar가 표시 될 때 DesiredSize가 증가하지 않습니다.
ScrollBar
이 표시되거나 숨겨지면 ElementHost
은 그에 따라 높이를 조정한다는 것이 나의 요구 사항입니다. 이를 달성하기 위해 나는 SizeChanged
이벤트를 듣고 EventHandler
에 ScrollViewer
의 DesiredSize
을 얻은 다음 을 ElementHost
에 전달합니다.
- 2. 3.
한 가지 방법은,이 작품 다음 ItemsControl
의 모든 항목이 표시 될 때까지 ScrollBar
볼 (상황 1)으로, 내 창을 확대의 ScrollBar
가 사라지고, ElementHost
은 감소 된 높이로 조정됩니다 (상황 2). DesiredSize
실제로는 ScrollBar
이 숨겨져있는 순간이 작아졌습니다.
다른 방법으로는 작동하지 않습니다. ScrollBar
이 보이지 않으면 (상황 2), ScrollBar
이 필요하고 나타날 때까지 창 크기를 줄입니다. DesiredSize
은 동일하게 유지되고 ElementHost
은 조정되지 않습니다 (상황 3).
아이디어가 있으십니까? DesiredSize
이 때 ScrollBar
나타납니다 증가하지
이 일부 MVVM 물건과 함께 Scrollviewer
의 XAML이지만, 정말이며,이에 지점을 끊었되지 않는 이유는 무엇입니까? 왜 그것은 단지 수축입니까? (기본적으로 WPF 기본)
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden" >
<i:Interaction.Behaviors>
<beh:HeightChangedBehavior HeightChangedCommand="{Binding HeightChangedCommand}" />
</i:Interaction.Behaviors>
<ItemsControl ItemsSource="{Binding TabHeaders}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel IsItemsHost="True" Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="models:TabHeaderButtonModel">
<RadioButton Content="{Binding Caption}" IsChecked="{Binding IsChecked, Mode=TwoWay}" GroupName="Tabs"
Command="{Binding SelectionChangedCommand}" CommandParameter="{Binding}"
Style="{StaticResource TabHeaderToggleButtonStyle}">
</RadioButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
에서 ScrollViewer 스타일 :
<Style x:Key="ScrollViewerStyle1" TargetType="{x:Type ScrollViewer}">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid x:Name="Grid" Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Rectangle x:Name="Corner" Grid.Column="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/>
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Margin="{TemplateBinding Padding}" Grid.Row="0"/>
<ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
<ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}" Style="{DynamicResource ScrollBarStyle1}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>