Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在Grid.SetLeft和Grid.SetTop上注册回调_Wpf - Fatal编程技术网

Wpf 在Grid.SetLeft和Grid.SetTop上注册回调

Wpf 在Grid.SetLeft和Grid.SetTop上注册回调,wpf,Wpf,我需要通知客户组件网格中控件的位置更改 如果有人调用Grid.SetLeft(control,x),是否有可能得到通知 当然,我可以实现自己的Left属性,首先调用Grid.SetLeft,然后调用回调,但是如果其他人以另一种方式移动控件,我不会得到通知 谢谢您的帮助。如链接答案中所述,您只需使用OverrideMetadata注册自己的回调 我假设您使用的是Canvas,而不是Grid,因为Canvas是带有SetLeft的组件 在下面的示例中,我向画布添加了两个组件,一个按钮和一个文本块,并

我需要通知客户组件网格中控件的位置更改

如果有人调用Grid.SetLeft(control,x),是否有可能得到通知

当然,我可以实现自己的Left属性,首先调用Grid.SetLeft,然后调用回调,但是如果其他人以另一种方式移动控件,我不会得到通知


谢谢您的帮助。

如链接答案中所述,您只需使用OverrideMetadata注册自己的回调

我假设您使用的是
Canvas
,而不是
Grid
,因为Canvas是带有SetLeft的组件

在下面的示例中,我向画布添加了两个组件,一个按钮和一个文本块,并在单击它们时更改它们的位置。
然后我注册了三个覆盖,一个使用button作为类型,一个使用textblock,一个使用UIElement。尝试按原样运行应用程序,并注意UIElement如何不触发。删除前两行,即按钮和文本块的回调,看看它现在如何使用UIElement回调。
您可以使用此选项筛选出需要侦听的类型

<Window x:Class="WpfApplication6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas>
            <Button Width="100" Height="30" Content="Click" Click="ButtonBase_OnClick" x:Name="btn"/>
            <TextBlock Text="Click" Width="100" Height="30" Canvas.Top="40" MouseDown="UIElement_OnMouseDown" x:Name="tb"/>
        </Canvas>
    </Grid>
</Window>

如链接答案中所述,您只需使用OverrideMetadata注册自己的回调

我假设您使用的是
Canvas
,而不是
Grid
,因为Canvas是带有SetLeft的组件

在下面的示例中,我向画布添加了两个组件,一个按钮和一个文本块,并在单击它们时更改它们的位置。
然后我注册了三个覆盖,一个使用button作为类型,一个使用textblock,一个使用UIElement。尝试按原样运行应用程序,并注意UIElement如何不触发。删除前两行,即按钮和文本块的回调,看看它现在如何使用UIElement回调。
您可以使用此选项筛选出需要侦听的类型

<Window x:Class="WpfApplication6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas>
            <Button Width="100" Height="30" Content="Click" Click="ButtonBase_OnClick" x:Name="btn"/>
            <TextBlock Text="Click" Width="100" Height="30" Canvas.Top="40" MouseDown="UIElement_OnMouseDown" x:Name="tb"/>
        </Canvas>
    </Grid>
</Window>

如链接答案中所述,您只需使用OverrideMetadata注册自己的回调

我假设您使用的是
Canvas
,而不是
Grid
,因为Canvas是带有SetLeft的组件

在下面的示例中,我向画布添加了两个组件,一个按钮和一个文本块,并在单击它们时更改它们的位置。
然后我注册了三个覆盖,一个使用button作为类型,一个使用textblock,一个使用UIElement。尝试按原样运行应用程序,并注意UIElement如何不触发。删除前两行,即按钮和文本块的回调,看看它现在如何使用UIElement回调。
您可以使用此选项筛选出需要侦听的类型

<Window x:Class="WpfApplication6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas>
            <Button Width="100" Height="30" Content="Click" Click="ButtonBase_OnClick" x:Name="btn"/>
            <TextBlock Text="Click" Width="100" Height="30" Canvas.Top="40" MouseDown="UIElement_OnMouseDown" x:Name="tb"/>
        </Canvas>
    </Grid>
</Window>

如链接答案中所述,您只需使用OverrideMetadata注册自己的回调

我假设您使用的是
Canvas
,而不是
Grid
,因为Canvas是带有SetLeft的组件

在下面的示例中,我向画布添加了两个组件,一个按钮和一个文本块,并在单击它们时更改它们的位置。
然后我注册了三个覆盖,一个使用button作为类型,一个使用textblock,一个使用UIElement。尝试按原样运行应用程序,并注意UIElement如何不触发。删除前两行,即按钮和文本块的回调,看看它现在如何使用UIElement回调。
您可以使用此选项筛选出需要侦听的类型

<Window x:Class="WpfApplication6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas>
            <Button Width="100" Height="30" Content="Click" Click="ButtonBase_OnClick" x:Name="btn"/>
            <TextBlock Text="Click" Width="100" Height="30" Canvas.Top="40" MouseDown="UIElement_OnMouseDown" x:Name="tb"/>
        </Canvas>
    </Grid>
</Window>

如果你读了链接,你会发现它与SetLeft不兼容。首先,没有Grid.SetLeft这样的东西。你确定你不是在谈论Canvas.SetLeft吗?在这种情况下,我已经实现了答案中的代码,它确实有效。嗯,我会发布一个答案。等一下,如果你读了链接,就会发现SetLeft不起作用。首先,没有Grid.SetLeft这样的东西。你确定你不是在谈论Canvas.SetLeft吗?在这种情况下,我已经实现了答案中的代码,它确实有效。嗯,我会发布一个答案。等一下,如果你读了链接,就会发现SetLeft不起作用。首先,没有Grid.SetLeft这样的东西。你确定你不是在谈论Canvas.SetLeft吗?在这种情况下,我已经实现了答案中的代码,它确实有效。嗯,我会发布一个答案。等一下,如果你读了链接,就会发现SetLeft不起作用。首先,没有Grid.SetLeft这样的东西。你确定你不是在谈论Canvas.SetLeft吗?在这种情况下,我已经实现了答案中的代码,它确实有效。嗯,我会发布一个答案。等一下,非常感谢!我的尝试几乎是对的,但我用打字机写的主窗口,我现在明白是错的。非常感谢!我的尝试几乎是对的,但我用打字机写的主窗口,我现在明白是错的。非常感谢!我的尝试几乎是对的,但我用打字机写的主窗口,我现在明白是错的。非常感谢!我的尝试几乎是对的,但我用typeof写了MainWindow,我现在明白这是错的。