2

我有一个问题是我离开不高兴。我想拖放一个项目在列表视图中,当我将一个样式应用于我的项目时,我无法做到这一点。只有当我没有应用样式(MyButtonStyle)/或样式中没有此图像时,我才能做到并且工作完美。当我有风格(MyButtonStyle)时,不调用ItemDragStarting事件。拖放UWP vs按钮样式

另一种情况:我点击了关联的事件,并且当我应用这个样式时崩溃。我不明白问题是什么,有人可以帮助我吗?

谢谢:

代码的MainPage:

<ListView x:Name="MyListView" ItemsSource="{x:Bind _ObservableCollection}" Style="{StaticResource MyListViewStyle}" SelectionMode="None" CanDragItems="True" DragItemsStarting="MyListView_OnDragItemsStarting"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <Button Tapped="Item_Tapped" Style="{StaticResource MyButtonStyle}" /> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 

XAML代码风格:

<Style x:Key="MyButtonStyle" TargetType="Button"> 
    <Setter Property="Background" Value="{StaticResource MyColor1}"/> 
    <Setter Property="Template"> 
      <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Border x:Name="ButtonContent" Background="{TemplateBinding Background}"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"/> 
          <VisualState x:Name="PointerOver"> 
           <Storyboard> 
            <ColorAnimation Storyboard.TargetName="ButtonContent" To="{StaticResource MyColor2}" 
             Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
             Duration="00:00:00.1"/> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Pressed"> 
           <Storyboard> 
            <PointerDownThemeAnimation TargetName="ButtonContent"/> 
            <ColorAnimation Storyboard.TargetName="ButtonContent" To="{StaticResource MyColor3}" 
             Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
             Duration="00:00:00.1"/> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Image Width="200" Height="200"> 
         <Image.Source> 
          <BitmapImage UriSource="{Binding MyImage, Mode=OneTime}" /> 
         </Image.Source> 
        </Image> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

1

最适合你的解决办法是不使用Button在所有。使用IsItemClickEnabled属性和ItemClick事件代替ListView,然后将您的图像放入ItemContainerStyle。它将解决您的拖放问题,集中问题并提高性能。

+0

Hi @Filip Skakun,谢谢你的回复。 在ItemContainerStyle中应用这种风格非常困难,或者我不明白我在做什么。 – fipcurren88