【问题标题】:Debugging Triggers (or why doesn't this trigger work?)调试触发器(或者为什么这个触发器不起作用?)
【发布时间】:2012-01-16 19:58:56
【问题描述】:

我试图在控件变得可见时淡入它。以下编译并运行良好,只是没有淡入(当 IsActive 设置为 true 时,控件立即出现)

<UserControl x:Class="blah"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:util="clr-namespace:blah.Util"
             mc:Ignorable="d" 
             d:DesignHeight="250" d:DesignWidth="400">
    <UserControl.Resources>
        <util:BooleanToVisibilityConverter x:Key="BoolToVis" />

        <Style TargetType="UserControl">
            <Style.Triggers>
                <Trigger Property="Visibility" Value="Visible">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.0" To="1.0" Duration="0:0:1.25" />
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                </Trigger>
            </Style.Triggers>
        </Style>
    </UserControl.Resources>

    <UserControl.Visibility>
        <Binding Path="IsActive" Converter="{StaticResource ResourceKey=BoolToVis}" ConverterParameter="False" />
    </UserControl.Visibility> 

    <!-- Snip rest of simple control -->

</UserControl>

首先,如果有人能告诉我为什么这不起作用,我将不胜感激。

其次,我想知道是否有任何方法可以调试这些东西,因为我经常发现自己试图让触发器正常工作。目前,我的调试包括盯着 XAML 以尝试查看问题所在,或者随机更改位以尝试缩小范围。

我真正想做的是在&lt;Trigger Property="Visibility" Value="Visible"&gt; 位上设置一个断点,以查看是否将其作为起点触发。显然我不能这样做,但想知道是否有任何方法可以进行更有条理的调试,而不是我当前的随机戳一堵空白墙。 :-/

【问题讨论】:

  • 通常要调试触发器,我要么更改一个非常明显的属性,例如BackgroundForeground 颜色,或者如果这不起作用,我将使用Snoop 来查看某事物在运行时的当前值是多少以及何时发生变化。

标签: wpf debugging triggers


【解决方案1】:

在 Style 中设置 UserControl.Visibility,否则如果您明确设置 Visibility 属性,您将覆盖 Style.Trigger

<Setter Property="Visibility" Value="{Binding Path=IsActive, Converter={StaticResource ResourceKey=BoolToVis}, ConverterParameter=False}" />

【讨论】:

  • 谢谢,试过了,但没有任何区别。通过设置第一个孩子的可见性/不透明度而不是控件本身,让它最终工作。不知道为什么这会有所作为。
  • @GazTheDestroyer:如果在资源中指定了样式,则该样式仅适用于子项,而不适用于控件本身...
  • 非常感谢 H.B.如果您想将此添加为答案,我将标记为正确。
  • H.B.似乎已经消失了,所以将此标记为他评论的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多