我的控件有5个依赖属性。我在XAML中将它们设置为:
<MyControl Prop1="1" Prop2="2" Prop3="3" Prop4="4" />
如您所见,我只在XAML中设置了5个属性中的4个。
我需要找到的是一些机制来指示已经处理了XAML中设置的所有属性。通过此事件,我可以运行我的SetItAllUp()方法。
选项1 。使用DP设置器
失败:不是一个选项,因为我不能一次调用SetItAllUp()。这也具有基于XAML中每个DP的序数声明激活的副作用。如果 在我的属性之间存在某种类型的链接或依赖关系,则会破坏它。
选项2 。使用DP设置器,并测试所有值的设置
失败:不是一个选项,因为有时某些DP值是可选的 - 让我们假装确定是否正确设置可选值所需的逻辑太复杂,现在不能实现此解决方案。
选项3 。使用MyControl.Loaded
失败:不是一个选择,因为这太早了。事实上,我能看到的每一件事都会过早发生。这几乎就像创建了对象一样,然后引擎盖下的东西开始根据声明设置DP值。
有一些事件或事情,对吗? //谢谢
答案 0 :(得分:1)
加载正常。对不起,感到困惑。
我测试了这个课程:
public class MyPath : Path
{
public MyPath()
{
Loaded += MyPath_Loaded;
}
void MyPath_Loaded(object sender, RoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Loaded");
}
public int Test1
{
get { return (int)GetValue(Test1Property); }
set
{
SetValue(Test1Property, value);
System.Diagnostics.Debug.WriteLine("Test1");
}
}
public static readonly DependencyProperty Test1Property =
DependencyProperty.Register("Test1", typeof(int), typeof(MyPath),
new PropertyMetadata(DependencyProperty.UnsetValue, null));
public int Test2
{
get { return (int)GetValue(Test2Property); }
set
{
SetValue(Test2Property, value);
System.Diagnostics.Debug.WriteLine("Test2");
}
}
public static readonly DependencyProperty Test2Property =
DependencyProperty.Register("Test2", typeof(int), typeof(MyPath),
new PropertyMetadata(DependencyProperty.UnsetValue, null));
public int Test3
{
get { return (int)GetValue(Test3Property); }
set
{
SetValue(Test3Property, value);
System.Diagnostics.Debug.WriteLine("Test3");
}
}
public static readonly DependencyProperty Test3Property =
DependencyProperty.Register("Test3", typeof(int), typeof(MyPath),
new PropertyMetadata(DependencyProperty.UnsetValue, null));
public int Test4
{
get { return (int)GetValue(Test4Property); }
set
{
SetValue(Test4Property, value);
System.Diagnostics.Debug.WriteLine("Test4");
}
}
public static readonly DependencyProperty Test4Property =
DependencyProperty.Register("Test4", typeof(int), typeof(MyPath),
new PropertyMetadata(DependencyProperty.UnsetValue, null));
public int Test5
{
get { return (int)GetValue(Test5Property); }
set
{
SetValue(Test5Property, value);
System.Diagnostics.Debug.WriteLine("Test5");
}
}
public static readonly DependencyProperty Test5Property =
DependencyProperty.Register("Test5", typeof(int), typeof(MyPath),
new PropertyMetadata(DependencyProperty.UnsetValue, null));
}
使用此XAML:
<Grid Background="{StaticResource ApplicationPageBackgroundBrush}">
<local:MyPath Test1="1" Test2="2" Test3="3" Test4="4" />
</Grid>
得到了这个跟踪:
Test1
Test2
Test3
Test4
Loaded
事实证明,Loaded工作正常。 我之前的测试必须有其他一些因素。 我的简化测试显示Loaded似乎很完美。