首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF边界数据采集器的奇怪行为

WPF边界数据采集器的奇怪行为
EN

Stack Overflow用户
提问于 2015-11-01 11:42:41
回答 1查看 626关注 0票数 0

当我将Value设置为Binding={Binding IsCrit}的"False“时,程序似乎运行得很好,但这与我所需要的正好相反,因为我只想让动画/故事板在某一技能的命中至关重要时发挥作用。我只想要彩色动画和故事板播放,如果IsCrit"True"。但是,当我将Value设置为True时,它就不会执行动画或故事板。

当我将其设置为false时,“动画”是在每个技能上播放的,但是当一个能力IsCritTrue时,动画就不会为该项播放。当我将Datatrigger Value设置为True时,某些东西似乎不起作用

我对WPF比较陌生,所以大多数WPF都是我在网上找到的片段。这可能和我的BorderStackPanel有关吗?

整个过程都封装在一个ListView.ItemTemplate中,因为这也可能与它不能工作有关。

代码语言:javascript
复制
<Border BorderBrush="{Binding ImageBorderColor}" Name="AbilityBorder"
                        BorderThickness="2"  Margin="0,0,10,0"
                        CornerRadius="8,8,8,8" RenderTransformOrigin=".5,.5"
                        Background="{Binding ImageBorderColor}">
                    <Border.Style>
                        <Style TargetType="{x:Type Border}">
                            <Style.Resources>
                                <Storyboard x:Key="CritAnimation" >
                                    <ColorAnimation Storyboard.TargetProperty="BorderBrush.Color"
                                                    To="White" 
                                                    AutoReverse="True" Duration="0:0:0.5" RepeatBehavior="Forever"
                                                    FillBehavior="HoldEnd" />                                     
                                </Storyboard>
                            </Style.Resources>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=IsCrit}" Value="False">
                                    <DataTrigger.EnterActions>
                                        <BeginStoryboard Name="flash" Storyboard="{StaticResource CritAnimation}" />
                                    </DataTrigger.EnterActions>
                                    <DataTrigger.ExitActions>
                                        <StopStoryboard BeginStoryboardName="flash" />
                                    </DataTrigger.ExitActions>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Border.Style>
                    <Border.RenderTransform>
                        <RotateTransform Angle="{Binding ImageAngle}" />
                    </Border.RenderTransform>
                    <Image x:Name="AbilityIcon" Source="{Binding ImageUrl}" Width="52" Height="52" 
                           RenderTransformOrigin=".5,.5">
                        <Image.RenderTransform>
                            <RotateTransform Angle="{Binding ImageAngle}" />
                        </Image.RenderTransform>
                    </Image>
                </Border>

这是我的AbilityView.xaml的全部细目。

代码语言:javascript
复制
   <ListView Name="AbilityList" 
          ItemsSource="{Binding LogLines}" 
          Background="{Binding BackgroundColor}" 
          Focusable="False" 
          Padding="10,10,0,0"
          IsTextSearchEnabled="False" 
          ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
          ScrollViewer.VerticalScrollBarVisibility="Disabled">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel cal:Message.Attach="[Event MouseLeftButtonUp] = [Action CopyToClipBoard($dataContext)]" x:Name="Item" Orientation="Horizontal" ToolTip="{Binding TooltipText}">
                <Border BorderBrush="{Binding ImageBorderColor}" Name="AbilityBorder"
                        BorderThickness="2"  Margin="0,0,10,0"
                        CornerRadius="8,8,8,8" RenderTransformOrigin=".5,.5"
                        Background="{Binding ImageBorderColor}">
                    <!--<Border.Style>
                        <Style TargetType="{x:Type Border}">
                            <Style.Resources>
                                <Storyboard x:Key="CritAnimation" >
                                    <ColorAnimation Storyboard.TargetProperty="BorderBrush.Color"
                                                    To="White" 
                                                    AutoReverse="True" Duration="0:0:0.5" RepeatBehavior="Forever"
                                                    FillBehavior="HoldEnd" />                                     
                                </Storyboard>
                            </Style.Resources>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=IsCrit}" Value="False">
                                    <DataTrigger.EnterActions>
                                        <BeginStoryboard Name="flash" Storyboard="{StaticResource CritAnimation}" />
                                    </DataTrigger.EnterActions>
                                    <DataTrigger.ExitActions>
                                        <StopStoryboard BeginStoryboardName="flash" />
                                    </DataTrigger.ExitActions>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Border.Style>-->
                    <Border.RenderTransform>
                        <RotateTransform Angle="{Binding ImageAngle}" />
                    </Border.RenderTransform>
                    <Image x:Name="AbilityIcon" Source="{Binding ImageUrl}" Width="52" Height="52" 
                           RenderTransformOrigin=".5,.5">
                        <Image.RenderTransform>
                            <RotateTransform Angle="{Binding ImageAngle}" />
                        </Image.RenderTransform>
                    </Image>
                </Border>
                <custom:OutlinedText
                    VerticalAlignment="Center" Text="{Binding Text}" Visibility="{Binding TextVisibility}" FontSize="{Binding FontSize, FallbackValue=32}">
                </custom:OutlinedText>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="Focusable" Value="false" />
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <ScaleTransform x:Name="transform" />
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <EventTrigger RoutedEvent="Loaded">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.10" />
                                <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" From="0" Duration="0:0:0.1"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
</ListView>

每隔1-2秒就会插入一个新项目,因此我不需要在项目上使用NotifyPropertyChanged事件。其他项以相同的方式绑定,一个新的视图模型将被插入到ListView使用的集合中。

当复制到剪贴板时,杯本微点击事件也很好。唯一的问题是,当值为真时,with事件不会触发。此DataTrigger是否仅在发生更改时使用?

当值为True时,难道没有使用条件触发器的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-02 17:00:50

我就是这样解决问题的。在实现的TemplateSelector中使用两个不同的模板。

代码语言:javascript
复制
public class AbilityItemTemplateSelector : DataTemplateSelector
{
    public DataTemplate Critical { get; set; }
    public DataTemplate Normal { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        var logItem = item as CombatLogViewModel;

        if (logItem != null)
        {
            return logItem.IsCrit ? Critical : Normal;
        }

        return base.SelectTemplate(item, container);
    }
}
代码语言:javascript
复制
  <ListView Name="AbilityList" 
          ItemsSource="{Binding LogLines}" 
          Background="{Binding BackgroundColor}" 
          Focusable="False" 
          Padding="10,10,0,0"
          IsTextSearchEnabled="False" 
          ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
          ScrollViewer.VerticalScrollBarVisibility="Disabled">
    <ListView.Resources>
        <DataTemplate x:Key="CriticalTemplate">
            <StackPanel cal:Message.Attach="[Event MouseLeftButtonUp] = [Action CopyToClipBoard($dataContext)]" x:Name="Item" Orientation="Horizontal" ToolTip="{Binding TooltipText}">
                <Border BorderThickness="2"  Margin="0,0,10,0"
                        CornerRadius="5,5,5,5" RenderTransformOrigin=".5,.5">
                    <Border.BorderBrush>
                        <SolidColorBrush Color="{Binding ImageBorderColor}" />
                    </Border.BorderBrush>
                    <Border.Background>
                        <SolidColorBrush Color="{Binding ImageBorderColor}" />
                    </Border.Background>
                    <Border.Style>
                        <Style TargetType="{x:Type Border}">
                            <Setter Property="Background">
                               <Setter.Value>
                                   <SolidColorBrush Color="{Binding ImageBorderColor}" />
                               </Setter.Value>
                            </Setter>
                            <Style.Triggers>
                                <EventTrigger RoutedEvent="Border.Loaded">
                                    <EventTrigger.Actions>
                                        <BeginStoryboard>
                                            <Storyboard>
                                                <ColorAnimation 
                                                    Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
                                                    From="Red" To="AliceBlue" 
                                                    Duration="00:00:0.500" AutoReverse="True" 
                                                    RepeatBehavior="Forever" />
                                                <ColorAnimation 
                                                    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                                    From="Red" To="AliceBlue" 
                                                    Duration="00:00:0.500" AutoReverse="True" 
                                                    RepeatBehavior="Forever" />
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </EventTrigger.Actions>
                                </EventTrigger>
                            </Style.Triggers>
                        </Style>
                    </Border.Style>
                    <Border.Triggers>
                        <EventTrigger RoutedEvent="Border.Loaded">
                            <EventTrigger.EnterActions>
                                <BeginStoryboard Name="Flash">
                                    <Storyboard>
                                        <ColorAnimation 
                                            Storyboard.TargetProperty="BorderBrush.Color" 
                                            Storyboard.TargetName="Border"
                                            From="Red" To="AliceBlue" Duration="0:0:1.5" AutoReverse="True" 
                                            RepeatBehavior="Forever" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger.EnterActions>
                            <EventTrigger.ExitActions>
                                <StopStoryboard BeginStoryboardName="Flash" />
                            </EventTrigger.ExitActions>
                        </EventTrigger>
                    </Border.Triggers>
                    <Border.RenderTransform>
                        <RotateTransform Angle="{Binding ImageAngle}" />
                    </Border.RenderTransform>
                    <Image x:Name="AbilityIcon" Source="{Binding ImageUrl}" Width="52" Height="52" 
                           RenderTransformOrigin=".5,.5">
                        <Image.RenderTransform>
                            <RotateTransform Angle="{Binding ImageAngle}" />
                        </Image.RenderTransform>
                    </Image>
                </Border>
                <custom:OutlinedText
                    VerticalAlignment="Center" Text="{Binding Text}" Visibility="{Binding TextVisibility}" FontSize="{Binding FontSize, FallbackValue=32}">
                </custom:OutlinedText>
            </StackPanel>
        </DataTemplate>
        <DataTemplate x:Key="NormalTemplate">
            <StackPanel cal:Message.Attach="[Event MouseLeftButtonUp] = [Action CopyToClipBoard($dataContext)]" x:Name="Item" Orientation="Horizontal" ToolTip="{Binding TooltipText}">
                <Border x:Name="AbilityBorder"
                        BorderThickness="2"  Margin="0,0,10,0"
                        CornerRadius="8,8,8,8" RenderTransformOrigin=".5,.5">
                    <Image x:Name="AbilityIcon" Source="{Binding ImageUrl}" Width="52" Height="52" 
                           RenderTransformOrigin=".5,.5">
                        <Image.RenderTransform>
                            <RotateTransform Angle="{Binding ImageAngle}" />
                        </Image.RenderTransform>
                    </Image>
                    <Border.BorderBrush>
                        <SolidColorBrush Color="{Binding ImageBorderColor}" />
                    </Border.BorderBrush>
                    <Border.Background>
                        <SolidColorBrush Color="{Binding ImageBorderColor}" />
                    </Border.Background>
                    <Border.RenderTransform>
                        <RotateTransform Angle="{Binding ImageAngle}" />
                    </Border.RenderTransform>
                </Border>
                <custom:OutlinedText
                    VerticalAlignment="Center" Text="{Binding Text}" Visibility="{Binding TextVisibility}" FontSize="{Binding FontSize, FallbackValue=32}">
                </custom:OutlinedText>
            </StackPanel>
        </DataTemplate>
    </ListView.Resources>
    <!--<ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel cal:Message.Attach="[Event MouseLeftButtonUp] = [Action CopyToClipBoard($dataContext)]" x:Name="Item" Orientation="Horizontal" ToolTip="{Binding TooltipText}">
                <Border Name="AbilityBorder"
                        BorderThickness="2"  Margin="0,0,10,0"
                        CornerRadius="8,8,8,8" RenderTransformOrigin=".5,.5">
                    <Border.BorderBrush>
                        <SolidColorBrush Color="{Binding ImageBorderColor}" />
                    </Border.BorderBrush>
                    <Border.Background>
                        <SolidColorBrush Color="{Binding ImageBorderColor}" />
                    </Border.Background>
                    <Border.Style>
                        <Style TargetType="{x:Type Border}">
                            <Style.Triggers>
                                <EventTrigger RoutedEvent="Border.Loaded">
                                    <EventTrigger.Actions>
                                        <BeginStoryboard>
                                            <Storyboard>
                                                <ColorAnimation 
                                                    Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
                                                    From="Red" To="AliceBlue" 
                                                    Duration="00:00:0.500" AutoReverse="True" 
                                                    RepeatBehavior="Forever" />
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </EventTrigger.Actions>
                                </EventTrigger>
                            </Style.Triggers>
                        </Style>
                    </Border.Style>
                    <Border.RenderTransform>
                        <RotateTransform Angle="{Binding ImageAngle}" />
                    </Border.RenderTransform>
                    <Image x:Name="AbilityIcon" Source="{Binding ImageUrl}" Width="52" Height="52" 
                           RenderTransformOrigin=".5,.5">
                        <Image.RenderTransform>
                            <RotateTransform Angle="{Binding ImageAngle}" />
                        </Image.RenderTransform>
                    </Image>
                </Border>
                <custom:OutlinedText
                    VerticalAlignment="Center" Text="{Binding Text}" Visibility="{Binding TextVisibility}" FontSize="{Binding FontSize, FallbackValue=32}">
                </custom:OutlinedText>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate-->
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="Focusable" Value="false" />
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <ScaleTransform x:Name="transform" />
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <EventTrigger RoutedEvent="Loaded">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.10" />
                                <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" From="0" Duration="0:0:0.1"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.ItemTemplateSelector>
        <custom:AbilityItemTemplateSelector 
            Normal="{StaticResource NormalTemplate}" 
            Critical="{StaticResource CriticalTemplate}" />
    </ListView.ItemTemplateSelector>
</ListView>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33461766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档