Advertisement
burneech

C#/XAML workaround solution for an accordion-style grid menu

Nov 20th, 2021
505
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.21 KB | None | 0 0
  1. // A workaround for:
  2. // https://stackoverflow.com/questions/70027679/why-does-the-ismouseover-trigger-not-work-for-a-grid-columndefinition
  3. //---------------------------
  4. // XAML PART:
  5.  
  6. <Grid x:Name="MainGrid">
  7.     <Grid.ColumnDefinitions>
  8.         <ColumnDefinition/>
  9.         <ColumnDefinition/>
  10.         <ColumnDefinition/>
  11.         <ColumnDefinition/>
  12.     </Grid.ColumnDefinitions>
  13.  
  14.     <Rectangle x:Name="Rect1" Fill="Blue"   Grid.Column="0" IsMouseDirectlyOverChanged="Rectangle_IsMouseDirectlyOverChanged"/>
  15.     <Rectangle x:Name="Rect2" Fill="Red"    Grid.Column="1" IsMouseDirectlyOverChanged="Rectangle_IsMouseDirectlyOverChanged"/>
  16.     <Rectangle x:Name="Rect3" Fill="Green"  Grid.Column="2" IsMouseDirectlyOverChanged="Rectangle_IsMouseDirectlyOverChanged"/>
  17.     <Rectangle x:Name="Rect4" Fill="Yellow" Grid.Column="3" IsMouseDirectlyOverChanged="Rectangle_IsMouseDirectlyOverChanged"/>
  18. </Grid>
  19.  
  20. //---------------------------
  21. // CODE-BEHIND PART:
  22.  
  23. // Widths in star* unit type
  24. private int _columnWidthWide = 2;
  25. private int _columnWidthNarrow = 1;
  26.  
  27. private void Rectangle_IsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs e)
  28. {
  29.     var rect = sender as Rectangle;
  30.  
  31.     if ((bool)e.NewValue)
  32.     {
  33.         // On mouse enter
  34.         GridLength columnWidthWide = new(_columnWidthWide, GridUnitType.Star);
  35.         switch (rect.Name)
  36.         {
  37.             case "Rect1":
  38.                 MainGrid.ColumnDefinitions[0].Width = columnWidthWide;
  39.                 break;
  40.             case "Rect2":
  41.                 MainGrid.ColumnDefinitions[1].Width = columnWidthWide;
  42.                 break;
  43.             case "Rect3":
  44.                 MainGrid.ColumnDefinitions[2].Width = columnWidthWide;
  45.                 break;
  46.             case "Rect4":
  47.                 MainGrid.ColumnDefinitions[3].Width = columnWidthWide;
  48.                 break;
  49.             default:
  50.                 break;
  51.         }
  52.     }
  53.     else
  54.     {
  55.         // On mouse leave
  56.         GridLength columnWidthNarrow = new(_columnWidthNarrow, GridUnitType.Star);
  57.         switch (rect.Name)
  58.         {
  59.             case "Rect1":
  60.                 MainGrid.ColumnDefinitions[0].Width = columnWidthNarrow;
  61.                 break;
  62.             case "Rect2":
  63.                 MainGrid.ColumnDefinitions[1].Width = columnWidthNarrow;
  64.                 break;
  65.             case "Rect3":
  66.                 MainGrid.ColumnDefinitions[2].Width = columnWidthNarrow;
  67.                 break;
  68.             case "Rect4":
  69.                 MainGrid.ColumnDefinitions[3].Width = columnWidthNarrow;
  70.                 break;
  71.             default:
  72.                 break;
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement