xdu*_*ine 5 wpf xaml storyboard
<Border Name="ItemBorder" Margin="5 5 0 5" BorderBrush="Black" BorderThickness="1" Height="75" Width="75">
<Border.Background>
<SolidColorBrush x:Name="ItemBorderBrush" Color="LightBlue"/>
</Border.Background>
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="someEvent">
<BeginStoryboard>
<Storyboard TargetName="ItemBorderBrush" TargetProperty="Color" Duration="0:0:1" >
<!--Storyboard TargetName="ItemBorder" TargetProperty="Background.Color" Duration="0:0:1"> -->
<ColorAnimation To="White"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ControlTemplate.Triggers>
Run Code Online (Sandbox Code Playgroud)
我会试着清楚地解释我的问题.故事板目标名称,当它是"ItemBorder"(注释掉的行)时间歇地工作.有时我会收到一个错误,即在范围内找不到名称"ItemBorder".
我决定遵循MSDN示例中的样式,并直接在画笔上更改颜色属性,而不是将故事板的目标作为边框,并按属性更改边框画笔的颜色(注释掉的行).这似乎有效.
但是,Name="ItemBorderBrush"不编译因为Name不是属性SolidColorBrush所以我使用x:Name="ItemBorderBrush"Both Name并且x:Name被Border接受.为什么是这样?
什么x:意思(如何x:Name不同Name),以及为什么有Name边界的属性有时只与故事板一起工作?
前缀x:只是从单独的命名空间设置一个属性:
在许多 XAML 文件的根标记中的命名空间声明中,您将看到通常有两个 XML 命名空间声明。第一个声明将整个 WPF 客户端/框架 XAML 命名空间映射为默认命名空间:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
第二个声明映射一个单独的 XAML 命名空间,将其(通常)映射到 x: 前缀。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
这些声明之间的关系是 x: 前缀映射支持属于 XAML 语言定义一部分的内在函数,而 WPF 是一种使用 XAML 作为语言并为 XAML 定义其对象词汇表的实现。由于 WPF 词汇表的用法比 XAML 内在函数的用法更为常见,因此 WPF 词汇表被映射为默认值
Name所以,和都在 Border 上起作用的原因x:Name是因为 Border 有一个名为 Name 的属性。它还支持 XAML 内在用法x:Name(WPF 使用它来创建类的命名实例)。
但是,SolidColorBrush 没有名为 Name 的属性,因此它仅支持x:Name.