绑定到网格WPF的Name属性

时间:2014-09-10 10:18:57

标签: c# wpf xaml

所以我有我的xaml:

<Grid 
       Name="{x:Static enums:DropTargetNames.ItemsGridView}" />

因此enums是命名空间,DropTargetNames是静态类,MasterProgramGridView是静态字符串。这个想法是为了防止编码错误,因为这些错误在多个地方使用。

不幸的是,c#WPF不允许这样做。那么我可以像这样设置另一个属性作为网格的标识符吗?

识别网格的代码是:

var grid = dropInfo.Target as Grid;
var name = grid.Name;

switch (name) {

}

在开关中,您使用DropTargetNames.ItemsGridView或其他静态字符串。

2 个答案:

答案 0 :(得分:1)

您可以尝试通过AttachedProperty间接设置它,比如在一个名为ABC

的类中

假设附加属性声明为此

    public static readonly DependencyProperty DynamicNameProperty = DependencyProperty.RegisterAttached(
        "DynamicName", typeof(object), typeof(FrameworkElement), new PropertyMetadata(default(object), PropertyChangedCallback));

    private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
    {
        FrameworkElement frameworkElement = (FrameworkElement)dependencyObject;
        if (eventArgs.NewValue != null)
        {
            frameworkElement.Name = eventArgs.NewValue.ToString();
        }
    }

在XAML中,您可以像这样设置名称

<Grid 
   prefix:ABC:DynamicName="{x:Static enums:DropTargetNames.ItemsGridView}" />

答案 1 :(得分:0)

所以最后,我去了关于标签的评论。这正是我所需要的:

<Grid Tag="{x:Static enums:DropTargetNames.ItemsGridView}">

</Grid>

C#:

var grid = dropInfo.Target as Grid;

switch (grid.Tag as string)
{

}

一切都好!