小编Doc*_*tts的帖子

如何链接滚动条和滚动查看器

我目前有两个ScrollViewer包含同一集合的备用视图.我通过处理ScrollChanged事件并使用ScrollToVerticalOffset将两个滚动查看器的滚动绑定在一起.

出于演示原因,我已将ScrollViewer滚动条设置为隐藏,并希望从单独的ScrollBar控制它们.

这似乎并不简单.我记得几个月前看到一篇关于它的博客,但我再也找不到了.

任何人都可以向我指出一些有用的资源,或者给我一个正确的方向来推动它如何实现.

提前致谢.

wpf scrollbar scrollviewer

6
推荐指数
2
解决办法
7211
查看次数

使用DataTemplate将视图绑定到ViewModel的问题

我最近开始尝试理解MVVM并使用MvvmFoundation类.我试图使用DataTemplate for View Model类来显示View.XAML代码如下:TVM是TrackViewModel类型的属性.

使用DataContext放置在"堆栈"面板中的TrackView可以正确显示.内容控件版本呈现为空的TrackViewModel.

<Window.Resources>
    <DataTemplate  DataType="{x:Type vm:TrackViewModel}" >
        <v:TrackView/>
    </DataTemplate>
</Window.Resources>
<StackPanel>
    <ContentControl Width="200" Height="50" Content="{Binding Path=TVM, UpdateSourceTrigger=PropertyChanged}"/>
    <v:TrackView DataContext="{Binding TVM}"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

似乎我没有在DataTemplate中的TrackView和实例化的TrackViewModel,TVM之间建立链接.因此,TrackViewModel的PropertyChangedEventHandler在非工作情况下显示为null,但在我直接设置Datacontext时很好.

任何想法都非常感激.

TrackView XAML如下:

<UserControl.DataContext>
    <vm:TrackViewModel/>
</UserControl.DataContext>

<UserControl.Resources>
    <LinearGradientBrush x:Key="barBackgroundBrush"  StartPoint="0,0" EndPoint="0,1" Opacity="0.7">
        <GradientStop Offset="0" Color="Blue"/>
        <GradientStop Offset="0.3" Color="Aquamarine"/>
        <GradientStop Offset="1" Color="Blue"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="barTrackingBrush"  StartPoint="0,0" EndPoint="0,1" Opacity="0.7">
        <GradientStop Offset="0" Color="Orange"/>
        <GradientStop Offset="0.3" Color="OrangeRed"/>
        <GradientStop Offset="1" Color="Orange"/>

    </LinearGradientBrush>

    <DataTemplate x:Key="RegionDataTemplate" >
        <Border CornerRadius="5" BorderThickness="3" Background="{StaticResource barTrackingBrush}" 
                    Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Canvas}}}"
                    Width="{Binding Path=Duration}">
            <Border.RenderTransform>
                <TranslateTransform …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding mvvm

4
推荐指数
1
解决办法
2352
查看次数

附加行为绑定到controltemplate中的元素

我正在向滑块添加附加行为,这会导致在拖动拇指并将其保持在特定区域时滚动某些内容.(不能使用简单的IsMouseOver触发器,因为Slider Thumb具有MouseCapture.)

该行为有3个属性:

    #region IsScrollHoverProperty
    public static readonly DependencyProperty IsScrollHoverProperty = DependencyProperty.RegisterAttached(
                                                "IsScrollHover",
                                                typeof(Boolean),
                                                typeof(ScrollHoverAreaBehaviour),
                                                new UIPropertyMetadata(false));
    #endregion

    #region ScrollLeftRectProperty
    public static readonly DependencyProperty ScrollLeftRectProperty = DependencyProperty.RegisterAttached(
                                                "ScrollLeftRect",
                                                typeof(Rectangle),
                                                typeof(ScrollHoverAreaBehaviour),
                                                new UIPropertyMetadata(null));
    #endregion

    #region ScrollRightRectProperty
    public static readonly DependencyProperty ScrollRightRectProperty = DependencyProperty.RegisterAttached(
                                                "ScrollRightRect",
                                                typeof(Rectangle),
                                                typeof(ScrollHoverAreaBehaviour),
                                                new UIPropertyMetadata(null));
    #endregion
Run Code Online (Sandbox Code Playgroud)

当用户拖动滑块时,IsScrollHoverProperty被设置为true,这一切都在Slider的ControlTemplates.Triggers中完成,并且可以正常工作.

当它设置为true时,回调将把PreviewMouseEnterHandlers挂钩到两个Rectangle中以检测鼠标何时进入它们.

有问题的矩形也在Slider的controltemplate中定义:

        <StackPanel Grid.Row="0" Grid.RowSpan="3" HorizontalAlignment="Left" Orientation="Horizontal">
            <Rectangle  Width="40" Fill="#AAAAAAAA" Name="ScrollLeftRect"/>

            </StackPanel>
        <StackPanel Grid.Row="0" Grid.RowSpan="3" HorizontalAlignment="Right" Orientation="Horizontal">
            <Rectangle  Width="40" Fill="#AAAAAAAA" Name="ScrollRightRect"/>
         </StackPanel>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是将这些矩形绑定到附加的ScrollRightRect和ScrollLeftRect属性.我尝试了一些事情,并怀疑我犯了一个愚蠢的绑定错误,或者我试图做一些不允许的事情.我目前正在controltemplate.triggers中绑定它们,如下所示:

        <Trigger Property="local:ScrollHoverAreaBehaviour.IsScrollHover" Value="False">

            <Setter Property="local:ScrollHoverAreaBehaviour.ScrollLeftRect" Value="{Binding ElementName=ScrollLeftRect}"/>
            <Setter …
Run Code Online (Sandbox Code Playgroud)

wpf binding controltemplate attachedbehaviors

3
推荐指数
1
解决办法
4697
查看次数