一旦设置了所有依赖项属性,是否会触发事件?

时间:2012-05-31 23:15:11

标签: xaml windows-8 winrt-xaml

我的控件有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值。


更新!加载是解决方案。我的问题有缺陷。

有一些事件或事情,对吗? //谢谢

1 个答案:

答案 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似乎很完美。