WPF中的双击透明面板

时间:2019-03-23 16:26:00

标签: c# wpf

我正在使用VLC插件对MediaPlayer进行编码,并希望双击vlc(WindowsFormsintegration)(用于全屏显示)。但是没有双击事件。因此,我想到了覆盖VLC(WFI)的可点击透明面板。有人可以帮我吗?由于缺乏透明性,我在Windows上使用WPF,并将窗体Winforms切换为WPF。

1 个答案:

答案 0 :(得分:2)

在WPF中将透明项目放置在另一个项目上很容易。下面的示例WPF显示了透明边框,覆盖了Grid控件上的按钮。

<Grid Background="#006000">
    <Button Content="clicky" Click="clicky"
            HorizontalAlignment="Left" Margin="30"/>
    <Border Background="#00FFFFFF" >
        <Border.InputBindings>
            <MouseBinding MouseAction="LeftDoubleClick "
                Command="{Binding CommandDoubleClick}"/>
        </Border.InputBindings>
    </Border>
</Grid>     

enter image description here

Border元素绑定了一个双击命令。

这样做的问题是,透明的Border覆盖Button会阻止Button被点击。您无法单击Border元素以到达其下方的元素。如果您不需要访问透明元素下的任何内容,那么这应该对您有用。如果您确实需要访问透明项下的元素,则根本无法使用。

下面显示了绑定到边框上双击事件的RelayCommand代码和相关方法:

    private bool CanDoubleClick = true;
    RelayCommand commandDoubleClick;
    public ICommand CommandDoubleClick
    {
        get
        {
            if (commandDoubleClick == null)
            {
                commandDoubleClick = new RelayCommand(param => DoubleClickMethod(),
                param => CanDoubleClick);
            }
            return commandDoubleClick;
        }
    }

    private void DoubleClickMethod()
    {
        MessageBox.Show("Double-Clicked the Border");
    }

此代码放置在ViewModel中,该ViewModel用于包含透明边框的Window的DataContext。您将需要对MVVM设计模式,中继命令和绑定进行一些研究。

不幸的是,没有可以直接在Border或其他面板元素上访问的双击事件,所以这就是为什么需要更复杂的InputBindings的原因。