Flyout 导致应用程序崩溃 [Windows 10] C# XAML
Flyout causing the app to crash [Windows 10] C# XAML
我希望程序在用户按住控件(在移动设备上)或当用户右键单击控件(在 PC 上)时显示附加的浮出控件。
这是我的 XAML :
<DataTemplate x:DataType="data:Cards" x:Key="card">
<StackPanel x:Name="cardstack" Holding="cardstack_Holding" KeyDown="cardstack_KeyDown" >
<StackPanel Background="Blue" Height="100" />
<FlyoutBase.AttachedFlyout>
<MenuFlyout x:Name="optionpass">
<MenuFlyoutItem x:Name="delete" Text="Delete" Click="delete_Click"/>
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
</StackPanel>
</DataTemplate>
这是我的 C#:
private void cardstack_Holding(object sender, HoldingRoutedEventArgs e)
{
FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement);
}
private void cardstack_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.RightButton)
{
FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement);
}
}
当我在移动模拟器上点击并按住 Stackpanel 时,Holding 事件有效,但是当我右键单击我的 PC 时,它崩溃了!它说 "There are no attached Flyout!"。不知道怎么回事。
"Have you tried RightTapped event? Is it working?"
是和否:(
我刚刚找到解决问题的方法。
结果你必须像我的那样命名MenuFlyout
,而Flyoutbase.AttachedFlyout
不能在DataTemplate
中,意味着你必须把它除 DataTemplate
之外的任何其他位置,以便 .cs 文件可以找到 MenuFlyout
.
的名称
这是我的 C#:
public void cardstack_Holding(object sender, HoldingRoutedEventArgs e)
{
option_menu.ShowAt(sender as FrameworkElement);
e.Handled = true;
}
private void cardstack_PointerPressed(object sender, PointerRoutedEventArgs e)
{
Pointer pointr = e.Pointer;
if (pointr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
{
Windows.UI.Input.PointerPoint pointrd = e.GetCurrentPoint(sender as UIElement);
if (pointrd.Properties.IsRightButtonPressed)
{
option_menu.ShowAt(sender as FrameworkElement);
}
}
e.Handled = true;
}
请注意,在此之前我使用 ShowAttachedFlyout
,现在我使用 option_menu.ShowAt
。
KeyDown
事件以某种方式不适用于我的应用程序,所以我改用 PointerPressed
。
希望这对您有所帮助。 (0w0)/
我希望程序在用户按住控件(在移动设备上)或当用户右键单击控件(在 PC 上)时显示附加的浮出控件。
这是我的 XAML :
<DataTemplate x:DataType="data:Cards" x:Key="card">
<StackPanel x:Name="cardstack" Holding="cardstack_Holding" KeyDown="cardstack_KeyDown" >
<StackPanel Background="Blue" Height="100" />
<FlyoutBase.AttachedFlyout>
<MenuFlyout x:Name="optionpass">
<MenuFlyoutItem x:Name="delete" Text="Delete" Click="delete_Click"/>
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
</StackPanel>
</DataTemplate>
这是我的 C#:
private void cardstack_Holding(object sender, HoldingRoutedEventArgs e)
{
FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement);
}
private void cardstack_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.RightButton)
{
FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement);
}
}
当我在移动模拟器上点击并按住 Stackpanel 时,Holding 事件有效,但是当我右键单击我的 PC 时,它崩溃了!它说 "There are no attached Flyout!"。不知道怎么回事。
"Have you tried RightTapped event? Is it working?"
是和否:(
我刚刚找到解决问题的方法。
结果你必须像我的那样命名MenuFlyout
,而Flyoutbase.AttachedFlyout
不能在DataTemplate
中,意味着你必须把它除 DataTemplate
之外的任何其他位置,以便 .cs 文件可以找到 MenuFlyout
.
这是我的 C#:
public void cardstack_Holding(object sender, HoldingRoutedEventArgs e)
{
option_menu.ShowAt(sender as FrameworkElement);
e.Handled = true;
}
private void cardstack_PointerPressed(object sender, PointerRoutedEventArgs e)
{
Pointer pointr = e.Pointer;
if (pointr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
{
Windows.UI.Input.PointerPoint pointrd = e.GetCurrentPoint(sender as UIElement);
if (pointrd.Properties.IsRightButtonPressed)
{
option_menu.ShowAt(sender as FrameworkElement);
}
}
e.Handled = true;
}
请注意,在此之前我使用 ShowAttachedFlyout
,现在我使用 option_menu.ShowAt
。
KeyDown
事件以某种方式不适用于我的应用程序,所以我改用 PointerPressed
。
希望这对您有所帮助。 (0w0)/