Popup Not Working With Hit Test in Unity
A Popup like the example below doesn't ever hit using the VisualTreeHelper.HitTest. This becomes interesting when it's used as a dropdown for a combobox. Is there another way to hit test or some way to make Popups hit?
Code: Select all
<Popup IsOpen="True">
<Border BorderBrush="Red"
Background="Beige"
Width="100"
Height="100"
BorderThickness="1">
<Grid>
<Button Content="Test"
Style="{StaticResource STButtonSquare}"></Button>
</Grid>
</Border>
</Popup>
-
sfernandez
Site Admin
- Posts: 2983
- Joined:
Re: Popup Not Working With Hit Test in Unity
If you follow the proposed code in this post: viewtopic.php?f=3&t=2397#p13179, you'll see I used VisualTreeHelper.GetRoot() to get the root element of the View. You should use that element to start the HitTest search because is the one containing the popup layers as children.
Please let me know if that works.
Please let me know if that works.
Re: Popup Not Working With Hit Test in Unity
Sorry I missed that, that does fix a Popup by itself, but it doesn't seem to fix a Popup being used in a template for a ComboBox dropdown. If I change the content of a combobox item to be a button the button does hit test correctly, but the rest of the area of the dropdown does not.
-
sfernandez
Site Admin
- Posts: 2983
- Joined:
Re: Popup Not Working With Hit Test in Unity
Using our Noesis theme I can't reproduce that behavior, I get the elements forming the ComboBoxItems when calling HitTest.
Are you using your own template? Do you have IsHitTestVisible set to false in any of the template elements?
Are you using your own template? Do you have IsHitTestVisible set to false in any of the template elements?
Re: Popup Not Working With Hit Test in Unity
You are right, I made a new Unity project and imported NOESIS using the built in themes by default, and it works. I was using a custom template and such but in my project even converting to use the NOESIS theme it still doesn't hit test the dropdown on the combobox. So it has to be something about my project setup is the only thing I can think of, I have all the noesis settings the same between the two now and still in my project it doesn't work.
Re: Popup Not Working With Hit Test in Unity
So I made a super simple test page (XAML below), and with the Noesis settings in the image below tried it, so trying to remove any of my custom stuff at all, same result though, hit test works over the combobox itself but not over the dropdown, it does work over the button in the dropdown which would seem to indicate it's in the visual tree properly etc. Any ideas what I'm doing wrong?
Image of Noesis Settings
https://1drv.ms/u/s!AlRye2-nz3FElbkl-e6 ... g?e=FfqJce
Image of Noesis Settings
https://1drv.ms/u/s!AlRye2-nz3FElbkl-e6 ... g?e=FfqJce
Code: Select all
<UserControl x:Class="Stratheon.Client.UI.MainMenu.TestPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Stratheon.Client.UI.MainMenu"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<ComboBox>
<ComboBoxItem Content="Item1"></ComboBoxItem>
<ComboBoxItem>
<Button Content="Item 2"></Button>
</ComboBoxItem>
<ComboBoxItem>
<Grid Background="Aqua">
<TextBlock Text="Item 3"></TextBlock>
</Grid>
</ComboBoxItem>
<ComboBoxItem>
<Border BorderBrush="Red"
BorderThickness="1"
Background="Beige">
<TextBlock Text="Item 4"></TextBlock>
</Border>
</ComboBoxItem>
</ComboBox>
</Grid>
</UserControl>
-
sfernandez
Site Admin
- Posts: 2983
- Joined:
Re: Popup Not Working With Hit Test in Unity
When you say hit test is not working, you mean calling VisualTreeHelper.HitTest() function or using your mouse?
If you attach the following behavior to the Main Camera where the NoesisView component is added, do you get messages when moving the mouse over the drop down items?
If you attach the following behavior to the Main Camera where the NoesisView component is added, do you get messages when moving the mouse over the drop down items?
Code: Select all
using UnityEngine;
using Noesis;
public class HitTestBehavior : MonoBehaviour
{
Visual lastHit;
Visual root;
void Start()
{
NoesisView view = GetComponent<NoesisView>();
root = (Visual)VisualTreeHelper.GetRoot(view.Content);
}
void Update()
{
Vector3 mousePos = Input.mousePosition;
Point pos = root.PointFromScreen(new Point(mousePos.x, Screen.height - mousePos.y));
HitTestResult hit = VisualTreeHelper.HitTest(root, pos);
if (hit.VisualHit != lastHit)
{
lastHit = (Visual)hit.VisualHit;
if (lastHit != null)
{
Debug.Log($"HitTest -> {lastHit.GetType()}");
}
}
}
}
Re: Popup Not Working With Hit Test in Unity
OK I think I figured this out, I was doing my hit test downstream of the new Unity Input System, if I do the hit test on a script (like the one you provided) on the camera itself then the hit testing works as expected, properly finds the hit against the popup of the dropdown of the combobox. So I'm guessing that the hit to the combobox dropdown is registering in Noesis, which is then removing the popup, then the Unity Input System must be firing after that, and by that time the popup is gone and therefore not there to find a hit. So I think I can solve this by simply putting a hit test script on the camera, hit test every frame there, and then when there's a click through the Input System just check that script on the camera if it had a hit this frame or not.
Thanks for all your help tracking this down!
Thanks for all your help tracking this down!
-
sfernandez
Site Admin
- Posts: 2983
- Joined:
Re: Popup Not Working With Hit Test in Unity
Glad you figured it out, thanks for the update.
Who is online
Users browsing this forum: No registered users and 39 guests