简体   繁体   English

如何使用wpf在另一个UserControl中移动滚动元素?

[英]How do I move the scroll element in another UserControl with wpf?

How do I bind an element in another usercontrol to a command target? 如何将另一个用户控件中的元素绑定到命令目标?

This is main xaml 这是主要的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>

What should I specify as CommandTarget? 我应该指定什么作为CommandTarget? How do I scroll the element in the following UserControl with the Button in the top Window? 如何使用顶部窗口中的按钮滚动以下UserControl中的元素?

This is 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>

Modify your usercontrol's code-behind with following: 使用以下命令修改用户控件的代码背后:

First, add a DependencyProperty to bind to of a ScrollViewer type 首先,添加一个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);
}

Don't forget to change UserControl1 to your usercontrol's class name. 不要忘记将UserControl1更改为用户控件的类名。

Then, set this property to ScrollViewerActive (i did it inside the control's constructor) 然后,将此属性设置为ScrollViewerActive (我在控件的构造函数中完成此操作)

SetScrollTarget(this, ScrollViewerActive);

And now you can bind to it like this 现在您可以像这样绑定它

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM