x:xaml(WPF)中的名称及其与Storyboard一起使用的含义是什么?

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边界的属性有时只与故事板一起工作?

Jus*_*ner 4

前缀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.