2013-07-30 110 views
0

旁邊的切換開關(treearrow)時,獲取treeviewitem的名稱(或標籤)我有一個樹形視圖加載2個子文件夾級別。當我點擊一個treeviewitem時,會調用一個方法從該路徑加載2個子文件夾級別。問題在於,當點擊此項目旁邊的treearrow/toggleswitch以加載子文件夾時,我必須調用相同的方法。所以我需要該項目的標籤,當點擊treearrow的東西,使目錄信息對象。我有一個點擊事件應用到切換開關。c#wpf當點擊項目

<Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton"> 
     <Setter Property="Focusable" Value="False"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ToggleButton"> 
        <Grid Width="15" 
          Height="13" 
          Background="Transparent"> 
         <Path x:Name="ExpandPath" 
           HorizontalAlignment="Left" 
           VerticalAlignment="Center" 
           Margin="1,1,1,1" 
           Fill="{StaticResource GlyphBrush}" 
           Data="M 4 0 L 8 4 L 4 8 Z"/> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsChecked" 
           Value="True"> 
          <Setter Property="Data" 
            TargetName="ExpandPath" 
            Value="M 0 4 L 8 4 L 4 8 Z"/> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="true"> 

         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <Style x:Key="TreeViewItemFocusVisual"> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <Border> 
         <Rectangle Margin="0,0,0,0" 
            StrokeThickness="5" 
            Stroke="Black" 
            StrokeDashArray="1 2" 
            Opacity="0"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
     <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
     <Setter Property="Padding" Value="1,0,0,0"/> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
     <Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}"/> 
     <Setter Property="FontSize" Value="15"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition MinWidth="19" Width="Auto"/> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition/> 
         </Grid.RowDefinitions> 

         <ToggleButton x:Name="Expander" 
             IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" 
             ClickMode="Press" 
             Style="{StaticResource ExpandCollapseToggleStyle}" 
             Click="onTreeArrowClick" 
             /> 
         <Border Name="Bd" 
           Grid.Column="1" 
           Background="{TemplateBinding Background}" 
           BorderBrush="{TemplateBinding BorderBrush}" 
           BorderThickness="{TemplateBinding BorderThickness}" 
           Padding="{TemplateBinding Padding}"> 
          <ContentPresenter x:Name="PART_Header" 
               ContentSource="Header" 
               HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> 
         </Border> 
         <ItemsPresenter x:Name="ItemsHost" 
             Grid.Row="1" 
             Grid.Column="1" 
             Grid.ColumnSpan="2"/> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsExpanded" Value="false"> 
          <Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed"/> 
         </Trigger> 
         <Trigger Property="HasItems" Value="false"> 
          <Setter TargetName="Expander" Property="Visibility" Value="Hidden"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="HasHeader" Value="false"/> 
           <Condition Property="Width" Value="Auto"/> 
          </MultiTrigger.Conditions> 
          <Setter TargetName="PART_Header" Property="MinWidth" Value="75"/> 
         </MultiTrigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="HasHeader" Value="false"/> 
           <Condition Property="Height" Value="Auto"/> 
          </MultiTrigger.Conditions> 
          <Setter TargetName="PART_Header" Property="MinHeight" Value="19"/> 
         </MultiTrigger> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
          <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="true"/> 
           <Condition Property="IsSelectionActive" Value="false"/> 
          </MultiTrigger.Conditions> 
          <Setter TargetName="Bd" Property="Background" Value="Transparent"/> 
          <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
         </MultiTrigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

回答

0

假設你獲得你Click事件訪問ToggleButton,你需要找到它TreeViewItem類型的父母。我爲此創建了一個擴展方法...如果您願意,可以將其編輯爲常規方法,或者將其置於靜態類(擴展方法需要處於靜態類中):

public static T GetParentOfType<T>(this DependencyObject element) 
    where T : DependencyObject 
{ 
    Type type = typeof(T); 
    if (element == null) return null; 
    DependencyObject parent = VisualTreeHelper.GetParent(element); 
    if (parent == null && ((FrameworkElement)element).Parent is DependencyObject) 
     parent = ((FrameworkElement)element).Parent; 
    if (parent == null) return null; 
    else if (parent.GetType() == type || parent.GetType().IsSubclassOf(type)) 
     return parent as T; 
    return GetParentOfType<T>(parent); 
} 

以此爲一個擴展方法,你會這樣稱呼它:

TreeViewItem treeViewItem = toggleButton.GetParentOfType<TreeViewItem>(); 
+0

已完成任務。非常感謝你! – mwahlhuetter