EventTrigger 在当前不在视图中的元素上

问题描述

说明

我有一个具有动态绑定的切换按钮。可以改变拨动开关的值。

<ToggleButton Grid.Column="2" IsChecked="{Binding IsNeeded}" Tag="IsOn" Style="{StaticResource ToggleSwitch}" />

这个切换按钮是一个列表框的一部分,它有很多条目。如果开关值将更改,请参阅拨动开关也更改。但变化只是在当前视图中。如果我在 ListBox 内向下滚动,则会显示旧值:

Example picture

我发现这是 EventTrigger 的问题,但我无法解决该问题。如果我在下面的当前 Input.xaml 中使用普通触发器,则一切正常。但是如果我删除 Trigger 并用 EventTrigger 替换它们,如果元素在视图中,则事件将被抛出。

输入.xaml

<!--Switch -->
    <Style x:Key="ToggleSwitch" targettype="{x:Type ToggleButton}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate targettype="{x:Type ToggleButton}">
                    <ViewBox>
                        <Border x:Name="Border" CornerRadius="10"
                            Background="#FFFFFFFF"
                            Width="40" Height="20">
                            <Border.Effect>
                                <DropShadowEffect ShadowDepth="0.5" Direction="0" Opacity="0.3" />
                            </Border.Effect>
                            <Ellipse x:Name="Ellipse" Fill="#FFFFFFFF" Stretch="Uniform"
                                 Margin="2 1 2 1"
                                 stroke="Gray" strokeThickness="0.2"
                                 HorizontalAlignment="Stretch">
                                <Ellipse.Effect>
                                    <DropShadowEffect BlurRadius="10" ShadowDepth="1" Opacity="0.3" Direction="260" />
                                </Ellipse.Effect>
                            </Ellipse>
                        </Border>
                    </ViewBox>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Tag" Value="IsOn">
                            <Setter TargetName="Ellipse" Property="Margin" Value="20 1 2 1" />
                            <Setter TargetName="Border" Property="Border.Background" Value="#0098db" />
                            <Setter TargetName="Border" Property="SolidColorBrush.Color" Value="#0098db" />
                        </Trigger>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter TargetName="Ellipse" Property="Margin" Value="20 1 2 1" />
                            <Setter TargetName="Border" Property="Border.Background" Value="#0098db" />
                            <Setter TargetName="Border" Property="SolidColorBrush.Color" Value="#0098db" />
                        </Trigger>
                        <Trigger Property="IsChecked" Value="False">
                            <Setter TargetName="Ellipse" Property="Margin" Value="2 1 2 1" />
                            <Setter TargetName="Border" Property="Border.Background" Value="White" />
                            <Setter TargetName="Border" Property="SolidColorBrush.Color" Value="White" />
                        </Trigger>
                        
                        <!--<EventTrigger RoutedEvent="Checked">
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetName="Border"
                                                    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                                    To="#0098db"
                                                    Duration="0:0:0.1" />
                                    <ThicknessAnimation Storyboard.TargetName="Ellipse"
                                                        Storyboard.TargetProperty="Margin"
                                                        To="20 1 2 1"
                                                        Duration="0:0:0.1" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                        <EventTrigger RoutedEvent="Unchecked">
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetName="Border"
                                                    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                                    To="White"
                                                    Duration="0:0:0.1" />
                                    <ThicknessAnimation Storyboard.TargetName="Ellipse"
                                                        Storyboard.TargetProperty="Margin"
                                                        To="2 1 2 1"
                                                        Duration="0:0:0.1" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>-->
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)