对ItemsControl中的元素进行TranslateZoomRotateBehavior?

时间:2013-11-27 08:54:30

标签: c# wpf xaml mvvm

我需要动态创建View CardSmall的实例。所以我决定使用ItemsControl。现在,我想将TranslateZoomRotateBehavior附加到ItemsControl中的所有元素以进行触摸交互。如果我像这样在ItemsControl中创建一个元素,它可以正常工作:

<ItemsControl> 
        <local:CardSmall>
            <i:Interaction.Behaviors>
                <ei:TranslateZoomRotateBehavior/>
            </i:Interaction.Behaviors>
        </local:CardSmall>
</ItemsControl>

但是一旦我定义了ItemsSource

<ItemsControl ItemsSource="{Binding CardsCollection}" >
...

使用触摸拖动交互变得非常不稳定。不喜欢它不光滑但更像是没有提供。与此同时,鼠标拖动交互就像一个魅力。使用MouseDragElementBehavior具有类似的效果。但是,触摸它的控制不是很好,而是在定义ItemsSource时,根本无法通过触摸和鼠标进行操作。

是否有其他人遇到此问题并提供解决方案或替代方案?哦,顺便说一句,ScatterView现在不是一个选择。

1 个答案:

答案 0 :(得分:0)

我发现了相同的行为,触摸时移动时非常糟糕,但用鼠标移动顺畅。

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
    x:Class="DragTest.MainWindow"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <DataTemplate x:Key="DataTemplate1">
        <Grid Background="#FFE01E1E" Width="100" Height="100">
            <i:Interaction.Behaviors>
                <ei:TranslateZoomRotateBehavior RotationalFriction="1" 
                    TranslateFriction="1"/>
            </i:Interaction.Behaviors>
        </Grid>
    </DataTemplate>
    <ItemsPanelTemplate x:Key="ItemsPanelTemplate1">
        <Canvas Height="250" Width="250"/>
    </ItemsPanelTemplate>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource SampleDataSource}}">
    <ItemsControl HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" 
         Width="100" ItemTemplate="{DynamicResource DataTemplate1}" 
         ItemsSource="{Binding Collection}" 
         ItemsPanel="{DynamicResource ItemsPanelTemplate1}"/>
</Grid>
</Window>