1

以下の XAML で「ScrollViewerItems」という名前の ScrollViewer にアクセスし、コード ビハインドで使用しようとしています。おそらくItemsControlに埋め込まれているため、名前が認識されていないようです。名前付きアクセスは必要ありませんが、コード ビハインドで ItemsControl の ScrollViewer にアクセスするにはどうすればよいですか?

<ItemsControl x:Name="EnteredItemsView" ItemsSource="{Binding LineItems}"  VirtualizingStackPanel.IsVirtualizing="True" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Template>
        <ControlTemplate>
            <ScrollViewer x:Name="ScrollViewerItems" Focusable="False">
                <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
            </ScrollViewer>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemTemplate>
    ...
4

1 に答える 1

3

ScrollViewer は、ItemsControl の視覚的な子です。

var scrollViewer =
    VisualTreeHelper.GetChild(EnteredItemsView, 0) as ScrollViewer;

子にアクセスする前に、ItemsControl が読み込まれている必要があることに注意してください。

LoadedItemsControlにハンドラを追加できます

<ItemsControl Loaded="ItemsControlLoaded" ...>

ScrollViewer にアクセスする場所

private void ItemsControlLoaded(object sender, EventArgs e)
{
    var itemsControl = sender as DependencyObject;
    var scrollViewer =
        VisualTreeHelper.GetChild(itemsControl, 0) as ScrollViewer;
}
于 2013-02-13T15:06:21.220 に答える