우리는 Windows 태블릿 PC 용 응용 프로그램을 작성 중입니다. SurfaceScrollViewer
을 사용하여 창의 오른쪽에 수직 및 스크롤 가능 목록을 렌더링하는 사용자 지정 컨트롤을 만들었습니다. 컨트롤은 Adorner를 사용하여 Window 컨텐트의 맨 위에 렌더링 될 수 있도록 Window의 adorner 레이어에 자신을 추가합니다.내 SurfaceScrollViewer가 드래그 스크롤되지 않는 이유는 무엇입니까?
정말 멋지게 작동하지만 표면 스크롤 뷰어는 마우스 휠이나 스크롤 막대를 통해서만 스크롤합니다. 스크롤 막대를 숨기고 터치로 목록을 드래그하는 사용자에게 의존하고 싶습니다. 그러나이 작업을 거부합니다. 우리는이 프로젝트의 SurfaceScrollViewer
컨트롤을이 프로젝트의 다른 곳에서 사용했습니다. 그래서이 문제는 컨트롤이 빌드 된 방법이나 AdornerLayer에 있기 때문에 문제가 될 것이라고 생각합니다. 표면에 접촉을 등록하는 것과 관련이 있습니까? 이상한 점은 목록의 SurfaceButton
컨트롤이 제대로 작동한다는 것입니다.
어떤 도움이나 조언을 주시면 감사하겠습니다. 이것은 기본적으로 사용자 정의 컨트롤입니다. 크기를 줄이기 위해 몇 개의 바인딩 비트와 조각을 제거했으며 주변 Window/AdornerLayer/Adorner 요소를 추가하여 컨텍스트에 넣었습니다.
EDIT - adorner는 실제로 창 자식 인 Grid의 adorner 레이어에 추가됩니다. 아래의 XAML을 업데이트했습니다.
<Window x:Name="Main">
<Grid>
<AdornerDecorator>
<!-- Adorner layer added to Window in code-behind -->
<AdornerLayer>
<Adorner>
<!-- Custom Control Starts Here -->
<Grid x:Name="root" Visibility="Collapsed" Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Window}}" Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType=Window}}">
<Controls:SurfaceButton x:Name="btnCloser" Opacity="0" Background="White"/>
<Grid x:Name="menu" Width="400" HorizontalAlignment="Right" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="20"/>
<RowDefinition />
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Border Opacity="0.75" BorderThickness="0" Background="Black" Grid.RowSpan="5" />
<TextBlock Text="{TemplateBinding Title}" FontSize="24" Grid.Row="1" Foreground="White" HorizontalAlignment="Center" Margin="10"/>
<Controls:SurfaceScrollViewer Grid.Row="3" Margin="5" Elasticity="0.0, 0.5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<ItemsControl x:Name="items" Background="Transparent" ItemsSource="{TemplateBinding MenuItems}">
<ItemsControl.Style>
<Style>
<Setter Property="ItemsControl.ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsControl.ItemTemplate">
<Setter.Value>
<DataTemplate>
<Controls:MyButton HorizontalContentAlignment="Center" Margin="3" Content="(Bound Stuff)" Background="(Bound Stuff)"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.Style>
</ItemsControl>
</Controls:SurfaceScrollViewer>
</Grid>
</Grid>
</Adorner>
</AdornerLayer>
</AdornerDecorator>
</Grid>
</Window>
지금은이 문제를 해결하기 위해 SurfaceScrollViewer에 스크롤바를 추가해야했습니다. 즉, 태블릿 사용자는이를 사용하여 목록을 스크롤 할 수 있습니다. 이상하게도 스크롤바를 사용하면 내용이 다시로드 될 때까지 잠기고 작동을 멈추는 경우가 있습니다. AdornerLayer와 관련이 있습니까 ?? –