应用x:key和x:Name

Pra*_*abu 0 windows wpf xaml windows-phone

我是Windows手机编程的新手.如果问题太基础,请道歉.

任何人都可以说在什么情况下我应该使用x:Key元素和x:Name元素?

这两者有什么不同?

era*_*zap 6

 x:Key  
Run Code Online (Sandbox Code Playgroud)

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

例如:你想要在xaml中使用的样式或某个元素.

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

    <myLocalNs:MyType x:Key="MyType1" />
Run Code Online (Sandbox Code Playgroud)

.

 x:Name 
Run Code Online (Sandbox Code Playgroud)

当您不想参考您的守则背后的元素时将使用:

 <UserControl>
    <Grid x:Name="grid">
        <Button x:Name="btn" />
    </Grid>
 </UserControl>
Run Code Online (Sandbox Code Playgroud)

在UserControl.cs中:

     btn.Contnent = "Im A Button";
     grid.RowDefenitions.Add(new RowDefenition());
Run Code Online (Sandbox Code Playgroud)

您将使用x的另一种情况:名称是在使用TargetName通过触发器在ControlTemplate/DataTemplate/Style中定位元素时

例如 :

<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>
Run Code Online (Sandbox Code Playgroud)

另一种情况是你想要绑定到XAML中的元素.

 <UserControl>
    <Grid x:Name="grid">
        <Button x:Name="btn" Content="{Binding ElementName=grid ,Path=Name}"/>
    </Grid>
 </UserControl>
Run Code Online (Sandbox Code Playgroud)

仅供参考,x:当您想要使用交互触发器或VisualState的目标元素时,也会使用名称.