<GridView
Name="Slider"
ItemsSource="{Binding Node.Contents}"
Loaded="SliderLoaded"
.../>
ViewModel
초기화는 비동기이며 그 곳에서 바인딩에 참조 된 Node
속성을 설정합니다.XAML (UWP) GridView가 완전히로드되는시기는 언제입니까?
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<ItemsStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
뒤에 코드에
:
이
는 항목 패널의 스타일입니다private async void SliderLoaded(object sender, RoutedEventArgs e)
{
// I get a null reference exception trying to access the GridView scrollViewer here
await Task.Delay(150); // [hack] wait a bit for the view tree and binding to be ready
// the scrollViewer is accessible after the delay
}
그리고이 나는 ScrollViewer에 액세스하는 방법 :
public static ScrollViewer GetScrollViewer(this DependencyObject element)
{
if (element is ScrollViewer)
{
return (ScrollViewer)element;
}
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
{
var child = VisualTreeHelper.GetChild(element, i);
var result = GetScrollViewer(child);
if (result != null)
return result;
}
return null;
}
읽기 문서 및 기타 그래서 모든 하위 뷰와 바인딩이 생성되는 장소와 같은 "로드 된"이벤트 처리기 솔기가 응답합니다. d와 사용 가능하지만 댓글에서 볼 수 있듯이 작동하지 않습니다.
동일한 결과가있는 DataContextChanged
이벤트 처리기도 시도했습니다.
그리드 scrollViewer 및 항목을 제 위치에 100 % 확신 할 수있는 방법 또는시기는 언제입니까?
"GridView scrollViewer에 액세스하려고합니다"라는 의미는 무엇입니까? 그게 뭘 사용 했지? –
중요합니까? 코드가 작동합니다 (질문에 포함 시켰습니다). – xleon