Как переместить элемент scroll в другой элемент UserControl с помощью wpf?

Как привязать элемент в другом usercontrol к цели команды?

Это основной xaml

<Grid>
    <StackPanel>
        <Button Height="200" x_Name="PageUpButton" FontFamily="Marlett" FontSize="40" Content="5" Command="{x:Static ScrollBar.PageUpCommand}" CommandTarget="{Binding ElementName=scrollViewerActive}"/>
        <local:posMenuChild x_Name="PosMenuChild"/>
        <Button Height="200" x_Name="PageDownButton" FontFamily="Marlett"  FontSize="40" Content="6" Command="{x:Static ScrollBar.PageDownCommand}" CommandTarget="{Binding ElementName=ScrollViewerActive }"/>
    </StackPanel>        
</Grid>

Что следует указать как CommandTarget?
Как прокрутить элемент в следующем UserControl с помощью кнопки в верхнем окне?

Это usercontrol

<Grid Height="200">
    <WrapPanel Orientation="Vertical"  Height="200">
        <ScrollViewer VerticalScrollBarVisibility="Hidden" Name="ScrollViewerActive" CanContentScroll="True" >
            <StackPanel>
                <TextBlock Text="Test1" FontSize="35"/>
                <TextBlock Text="Test2" FontSize="35"/>
                <TextBlock Text="Test3" FontSize="35"/>
                <TextBlock Text="Test4" FontSize="35"/>
                <TextBlock Text="Test5" FontSize="35"/>
                <TextBlock Text="Test6" FontSize="35"/>
            </StackPanel>
        </ScrollViewer>
    </WrapPanel>
</Grid>

1 ответ

  1. Измените код usercontrol следующим образом:

    Сначала добавьте a DependencyPropertyдля привязки к типуScrollViewer

    public static readonly DependencyProperty ScrollTargetProperty = DependencyProperty.RegisterAttached(
            "ScrollTarget", typeof(ScrollViewer), typeof(UserControl1), new PropertyMetadata(null));
    
    public static void SetScrollTarget(DependencyObject element, ScrollViewer value)
    {
       element.SetValue(ScrollTargetProperty, value);
    }
    
    public static ScrollViewer GetScrollTarget(DependencyObject element)
    {
       return (ScrollViewer)element.GetValue(ScrollTargetProperty);
    }
    

    Не забудьте изменить UserControl1имя класса usercontrol.

    Затем задайте этому свойству значение ScrollViewerActive(я сделал это в конструкторе элемента управления)

    SetScrollTarget(this, ScrollViewerActive);
    

    И теперь вы можете привязаться к нему вот так

    <Button Command="{x:Static ScrollBar.PageUpCommand}" CommandTarget="{Binding Path=ScrollTarget, ElementName=PosMenuChild, Mode=OneWay}"/>