所以我有我的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
或其他静态字符串。
答案 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)
{
}
一切都好!