Wpf 应用x:key和x:Name

Wpf 应用x:key和x:Name,wpf,windows,xaml,windows-phone,Wpf,Windows,Xaml,Windows Phone,我不熟悉windows phone编程。如果问题太简单,请道歉 有人能说在什么情况下我应该使用x:Key元素和x:Name元素吗 这两者的区别是什么 x:Key 需要在ResourceDictionary中定义元素时使用 例如:您不想在xaml中初始化的样式或某些元素 <Style TargetType=Button x:Key="MyBtnStyle> ...... <myLocalNs:MyType x:Key="MyTyp

我不熟悉windows phone编程。如果问题太简单,请道歉

有人能说在什么情况下我应该使用x:Key元素和x:Name元素吗

这两者的区别是什么

 x:Key  
需要在ResourceDictionary中定义元素时使用

例如:您不想在xaml中初始化的样式或某些元素

    <Style TargetType=Button x:Key="MyBtnStyle>
            ......

    <myLocalNs:MyType x:Key="MyType1" />
当您不想从代码隐藏中引用元素时,将使用:

 <UserControl>
    <Grid x:Name="grid">
        <Button x:Name="btn" />
    </Grid>
 </UserControl>
使用x:Name的另一种情况是,通过触发器将ControlTemplate/DataTemplate/Style中的元素作为目标,使用TargetName

例如:

<DataTemplate DataType="{x:Type h:HierarchicalNode}">     
        <Grid>                              
            <CheckBox  x:Name="chkbox" />
        </Grid>     
   <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding HasChildren}" Value="False">
            <Setter Property="Visibility" Value="Collapsed" TargetName="chkbox"/>
        </DataTrigger>        
    </DataTemplate.Triggers>
</DataTemplate>

另一种情况是不希望绑定到XAML中的元素

 <UserControl>
    <Grid x:Name="grid">
        <Button x:Name="btn" Content="{Binding ElementName=grid ,Path=Name}"/>
    </Grid>
 </UserControl>

仅供参考,x:Name在您希望使用交互触发器或VisualState以元素为目标时也会使用

需要在ResourceDictionary中定义元素时使用

例如:您不想在xaml中初始化的样式或某些元素

    <Style TargetType=Button x:Key="MyBtnStyle>
            ......

    <myLocalNs:MyType x:Key="MyType1" />
当您不想从代码隐藏中引用元素时,将使用:

 <UserControl>
    <Grid x:Name="grid">
        <Button x:Name="btn" />
    </Grid>
 </UserControl>
使用x:Name的另一种情况是,通过触发器将ControlTemplate/DataTemplate/Style中的元素作为目标,使用TargetName

例如:

<DataTemplate DataType="{x:Type h:HierarchicalNode}">     
        <Grid>                              
            <CheckBox  x:Name="chkbox" />
        </Grid>     
   <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding HasChildren}" Value="False">
            <Setter Property="Visibility" Value="Collapsed" TargetName="chkbox"/>
        </DataTrigger>        
    </DataTemplate.Triggers>
</DataTemplate>

另一种情况是不希望绑定到XAML中的元素

 <UserControl>
    <Grid x:Name="grid">
        <Button x:Name="btn" Content="{Binding ElementName=grid ,Path=Name}"/>
    </Grid>
 </UserControl>

仅供参考,x:Name在您希望使用交互触发器或VisualState以元素为目标时也会使用