Xaml 为什么触发器会在样式a中导致NullReferenceException,但在样式B(基于样式a)中却可以完美地工作?

Xaml 为什么触发器会在样式a中导致NullReferenceException,但在样式B(基于样式a)中却可以完美地工作?,xaml,triggers,styles,nullreferenceexception,Xaml,Triggers,Styles,Nullreferenceexception,我有一个基本风格,还有一大堆基于这个风格的风格。它们都使用一些(相同的)触发器,除了一个单独的触发器外,这些触发器工作得很好。此特定样式仅适用于派生样式 尝试将此触发器直接移动到基本样式会导致Visual Studio Designer中出现NullReferenceException。有谁能告诉我为什么(以及如何使它工作) 不幸的是,堆栈跟踪实际上没有给出任何线索: bei DataTest.EqualsConverter.Convert(对象[]值,类型targetType,对象参数,C

我有一个基本风格,还有一大堆基于这个风格的风格。它们都使用一些(相同的)触发器,除了一个单独的触发器外,这些触发器工作得很好。此特定样式仅适用于派生样式

尝试将此触发器直接移动到基本样式会导致Visual Studio Designer中出现NullReferenceException。有谁能告诉我为什么(以及如何使它工作)


不幸的是,堆栈跟踪实际上没有给出任何线索:

bei DataTest.EqualsConverter.Convert(对象[]值,类型targetType,对象参数,CultureInfo区域性) bei System.Windows.Data.MultiBindingExpression.TransferValue() bei System.Windows.Data.MultiBindingExpression.Transfer() bei System.Windows.Data.MultiBindingExpression.UpdateTarget(布尔includeInnerBindings) bei System.Windows.Data.MultiBindingExpression.AttachToContext(布尔lastChance) bei System.Windows.Data.MultiBindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(布尔lastChance) bei MS.Internal.Data.DataBindEngine.Task.Run(布尔lastChance) bei MS.Internal.Data.DataBindEngine.Run(对象参数) bei MS.Internal.Data.DataBindEngine.OnlayOutUpdate(对象发送方,事件参数e) bei System.Windows.ContextLayoutManager.fireLayoutUpdateEvent()文件 bei System.Windows.ContextLayoutManager.UpdateLayout() bei System.Windows.UIElement.UpdateLayout()


问题解决;这只是因为剪切粘贴过程本身

在我将代码snipet复制到一个外部文本编辑器中,并从那里再次复制回基本样式之后,异常就消失了

我认为这是VisualStudio本身的一个bug,因为最初(我忘了提到)即使重建整个项目也不能解决问题

对不起

        <Style x:Key="CalendarCellStyle" TargetType="{x:Type TextBlock}">
            <Setter Property="Text" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"/>
            <Setter Property="FontSize" Value="{StaticResource FontSize9}"/>
            <Setter Property="TextAlignment" Value="Center"/>
            <Setter Property="Margin" Value="5"/>
            <Setter Property="Padding" Value="2"/>
            <Setter Property="Foreground" Value="#FF515151"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <EventSetter Event="MouseDown" Handler="MouseDown_Click" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter Property="Background" Value="Red" />
                </Trigger>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled}" Value="False">
                    <Setter Property="Foreground" Value="{StaticResource ColorCalendarForegroundDisabled}" />
                    <Setter Property="Background" Value="{StaticResource ColorCalendarBackgroundDisabled}" />
                </DataTrigger>
<!-- the following trigger HERE causes a  NullReferenceException -->
                <DataTrigger Value="True">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource EqualsConverter}">
                            <Binding RelativeSource="{RelativeSource Self}" Path="Tag" />
                            <Binding RelativeSource="{RelativeSource AncestorType={x:Type UniformGrid}}"  Path="Tag" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Foreground" Value="{StaticResource ColorCalendarForegroundSelected}" />
                    <Setter Property="Background" Value="{StaticResource ColorCalendarBackgroundSelected}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>

        <Style x:Key="CalendarCellStyleMonth" BasedOn="{StaticResource CalendarCellStyle}" TargetType="{x:Type TextBlock}">
            <Setter Property="Text" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag, Converter={StaticResource MonthNameConverter}}"/>
            <Setter Property="FontSize" Value="{StaticResource FontSize12}"/>
            <Style.Triggers>
<!-- the very same trigger code HERE works properly ... -->
                <DataTrigger Value="True">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource EqualsConverter}">
                            <Binding RelativeSource="{RelativeSource Self}" Path="Tag" />
                            <Binding RelativeSource="{RelativeSource AncestorType={x:Type UniformGrid}}"  Path="Tag" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Foreground" Value="{StaticResource ColorCalendarForegroundSelected}" />
                    <Setter Property="Background" Value="{StaticResource ColorCalendarBackgroundSelected}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>

        <Style x:Key="CalendarCellStyleDay" BasedOn="{StaticResource CalendarCellStyle}" TargetType="{x:Type TextBlock}">
            <Style.Triggers>
<!-- ... as well as here too (and so on) -->
                <DataTrigger Value="True">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource EqualsConverter}">
                            <Binding RelativeSource="{RelativeSource Self}" Path="Tag" />
                            <Binding RelativeSource="{RelativeSource AncestorType={x:Type UniformGrid}}"  Path="Tag" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Foreground" Value="{StaticResource ColorCalendarForegroundSelected}" />
                    <Setter Property="Background" Value="{StaticResource ColorCalendarBackgroundSelected}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>