为什么 {x:Null} 不再是 UWP 中 Style Setter 中的有效值?
Why is {x:Null} no longer a valid value in a Style Setter in UWP?
跟进 ,为什么 {x:Null}
不再是 Setter.Value
的有效选项?
将此代码放入 UWP 应用的资源字典中:
<Style x:Key="MyList"
TargetType="ListView">
<Setter Property="Transitions"
Value="{x:Null}"/>
</Style>
并在任何 ListView
:
中使用它
<ListView Style="{StaticResource MyList}"/>
您的应用程序将会崩溃。还有一个令人讨厌的崩溃,这种崩溃会在您的调试器中没有正确中断的情况下关闭应用程序。
此外,设计师抱怨灾难性失败:
我知道将值设置为 {x:Null}
是有效的。如果你直接设置 <ListView Transitions="{x:Null}"/>
,那么它工作正常......正如预期的那样。
所以...风格制定者发生了什么事? ... 想解释一下吗,微软?至少有替代方法吗?
这确实是一种奇怪的行为,总的来说,因为正如您所解释的那样,直接设置为空有效,而使用样式则无效。我发现的唯一选择就是设置一个清晰的 transitioncollection:
<Page.Resources>
<Style x:Key="MyList" TargetType="ListView">
<Setter Property="Transitions" >
<Setter.Value>
<TransitionCollection></TransitionCollection>
</Setter.Value>
</Setter>
<Setter Property="DataContext" Value="{x:Null}"/>
</Style>
我设置了可以设置为null的DataContext的例子,它说了同样的错误但是编译和工作。
我知道这不是最好的解决方案,但它是拥有清晰的过渡集合的解决方法。
模板内的空值
你可以找到更多答案
<Color x:Key="BgNull"></Color>
<Style x:Key="L2" TargetType="TextBox">
<Setter Property="Background" Value="{StaticResource BgNull}"/>
</Style>
跟进 {x:Null}
不再是 Setter.Value
的有效选项?
将此代码放入 UWP 应用的资源字典中:
<Style x:Key="MyList"
TargetType="ListView">
<Setter Property="Transitions"
Value="{x:Null}"/>
</Style>
并在任何 ListView
:
<ListView Style="{StaticResource MyList}"/>
您的应用程序将会崩溃。还有一个令人讨厌的崩溃,这种崩溃会在您的调试器中没有正确中断的情况下关闭应用程序。
此外,设计师抱怨灾难性失败:
我知道将值设置为 {x:Null}
是有效的。如果你直接设置 <ListView Transitions="{x:Null}"/>
,那么它工作正常......正如预期的那样。
所以...风格制定者发生了什么事? ... 想解释一下吗,微软?至少有替代方法吗?
这确实是一种奇怪的行为,总的来说,因为正如您所解释的那样,直接设置为空有效,而使用样式则无效。我发现的唯一选择就是设置一个清晰的 transitioncollection:
<Page.Resources>
<Style x:Key="MyList" TargetType="ListView">
<Setter Property="Transitions" >
<Setter.Value>
<TransitionCollection></TransitionCollection>
</Setter.Value>
</Setter>
<Setter Property="DataContext" Value="{x:Null}"/>
</Style>
我设置了可以设置为null的DataContext的例子,它说了同样的错误但是编译和工作。
我知道这不是最好的解决方案,但它是拥有清晰的过渡集合的解决方法。
<Color x:Key="BgNull"></Color>
<Style x:Key="L2" TargetType="TextBox">
<Setter Property="Background" Value="{StaticResource BgNull}"/>
</Style>