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