Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 16th, 2012  |  syntax: None  |  size: 3.24 KB  |  hits: 16  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. ComboBox - TreeView, close popup on item select?
  2. <Popup x:Name="PART_Popup" AllowsTransparency="true" Focusable="false" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom">
  3.     <Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{TemplateBinding ActualWidth}">
  4.         <Border x:Name="DropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
  5.         <ScrollViewer>
  6.             <TreeView  x:Name="PART_TreeView" ItemsSource="{TemplateBinding ItemsSource}">
  7.                 <Interactivity:Interaction.Behaviors>
  8.                 <ComboTreeView:BindableSelectedItemBehaviour SelectedItem="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox} }, Path=SelectedItem, Mode=TwoWay}" />    
  9.                 </Interactivity:Interaction.Behaviors>                                                  
  10.                 </TreeView>                            
  11.         </ScrollViewer>
  12.         </Border>
  13.     </Microsoft_Windows_Themes:SystemDropShadowChrome>
  14. </Popup>
  15.        
  16. private void OnTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
  17.     {
  18.         this.SelectedItem = e.NewValue;
  19.  
  20.         var treeView = (TreeView)sender;
  21.         var control = (FrameworkElement)treeView.TemplatedParent;
  22.         ComboBox combo;
  23.  
  24.         do
  25.         {
  26.             combo = control as ComboBox;
  27.  
  28.             if (combo != null)
  29.             {
  30.                 break;
  31.             }
  32.         }
  33.         while ((control = (FrameworkElement)control.TemplatedParent) != null);
  34.  
  35.         if (combo == null)
  36.         {
  37.             return;
  38.         }
  39.  
  40.         Dispatcher.BeginInvoke(new Action(() => combo.IsDropDownOpen = false));
  41.     }
  42.        
  43. void EnsureComboPopupClosed(ComboBox cb)
  44. {
  45.     if (cb == null || cb.Template == null)
  46.         return;
  47.     Popup popup = cb.Template.FindName("PART_Popup", cb) as Popup;
  48.     if (popup == null)
  49.         return;
  50.     popup.IsOpen = false;
  51. }
  52.        
  53. ... xmlns:s="clr-namespace:System;assembly=mscorlib" ...
  54. ...
  55. <ControlTemplate.Resources>
  56.     ....
  57.     <Storyboard x:Key="ClosePopup"
  58.                 Duration="0:0:0"
  59.                 Storyboard.TargetName="PART_Popup"
  60.                 Storyboard.TargetProperty="IsOpen" >
  61.         <ObjectAnimationUsingKeyFrames>
  62.             <DiscreteObjectKeyFrame KeyTime="0:0:0">
  63.                 <DiscreteObjectKeyFrame.Value>
  64.                     <s:Boolean>False</s:Boolean>
  65.                 </DiscreteObjectKeyFrame.Value>
  66.             </DiscreteObjectKeyFrame>
  67.         </ObjectAnimationUsingKeyFrames>
  68.     </Storyboard>
  69.     ...
  70. </ControlTemplate.Resources>
  71.     ...
  72.     <TreeView  x:Name="PART_TreeView" ... >
  73.         ...
  74.         <TreeView.Triggers>
  75.             <EventTrigger RoutedEvent="TreeView.SelectedItemChanged">
  76.                 <EventTrigger.Actions>
  77.                     ...
  78.                     <BeginStoryboard Storyboard="{StaticResource ClosePopup}"/>
  79.                 </EventTrigger.Actions>
  80.             </EventTrigger>
  81.         </TreeView.Triggers>
  82.         ...
  83.     </TreeView>
  84.     ...