Silverlight透明层

时间:2014-08-21 12:13:13

标签: c# silverlight xaml behavior mousemove

我正在使用透明层,其顺序位于其他元素之上,以捕捉鼠标移动的行为。

问题是在这一层我有其他控制我无法捕捉到任何点击或行为,因为它将它们与触摸隔离开来。与此同时,我无法将此图层顺序更改为落后,因为它控制着所有其他元素的移动。

无论如何都要保持这个图层成为mousemove行为的参考,同时我可以触摸后面的元素。

1 个答案:

答案 0 :(得分:0)

Silverlight上的MouseMove事件会自动冒泡到父级。您只需要将一个MouseMove侦听器附加到RootVisual。见MSDN

这是一个示例UserControl,您可以将其放在MainPage表面上并观察鼠标移动事件。

<UserControl x:Class="DelmeSlCom.MouseMoveWatcher"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" Loaded="UserControl_Loaded">

    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel>
            <TextBlock x:Name="X" />
            <TextBlock x:Name="Y" />
        </StackPanel>
    </Grid>
</UserControl>

以及

背后的相关代码
public partial class MouseMoveWatcher : UserControl
{
    public MouseMoveWatcher()
    {
        InitializeComponent();
    }

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        (App.Current.RootVisual as MainPage).MouseMove += MouseMoveWatcher_MouseMove;
    }

    void MouseMoveWatcher_MouseMove(object sender, MouseEventArgs e)
    {
        var position = e.GetPosition(App.Current.RootVisual);
        this.X.Text = String.Format("{0:f}", position.X);
        this.Y.Text = String.Format("{0:f}", position.Y);
    }
}