2017-03-09 83 views
1

上ExpanderDoubleClick標題選擇項目我有一個的ListView不同的ItemTemplate,每個的ItemTemplate有ExpanderDoubleClick : Expander如何在列表視圖

我想選擇含自定義選擇設計在擴展模式下的項目在ListView(在每個項目UserControl中聲明)。 所以這是我爲ListView XAML:

<ListView x:Name="ListViewModules" ItemsSource="{Binding ListOfModules}" 
         ItemContainerStyle="{StaticResource ContainerListViewItemStyle}" 
         ItemTemplateSelector="{DynamicResource ModuleTemplateSelector}" 
         SelectionMode="Extended" 
         dd:DragDrop.IsDragSource="True" 
         dd:DragDrop.IsDropTarget="True" 
         dd:DragDrop.UseDefaultDragAdorner="True" 
         Grid.Column="0" Grid.Row="0" Height="494" Width="634" Background="#FFCDCDCD" 
         ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Visible" 
         BorderBrush="#666666" BorderThickness="1" Padding="0" 
         ClipToBounds="True" SnapsToDevicePixels="True" >     
</ListView> 

與風格去除標準藍色選擇(在App.xaml中聲明):

<Style x:Key="ContainerListViewItemStyle" TargetType="{x:Type ListViewItem}"> 
    <Setter Property="Margin" Value="2,2,2,0"/> 
    <Setter Property="dd:DragDrop.DragSourceIgnore" Value="False"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListViewItem}"> 
       <Border x:Name="Bd" BorderBrush="Transparent" BorderThickness="0" Background="Transparent" Padding="0" SnapsToDevicePixels="true"> 
        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

我有每個「用戶控件的」和而不同的ItemTemplate他們在這裏與它的一個個例的選擇設計:

<UserControl x:Class="Topinambour.Templates.Modules.DelayTemplate" ...> 
<Grid Width="602" MinHeight="24"> 
    <Grid.ColumnDefinitions>   <ColumnDefinition Width="40"/><ColumnDefinition />  </Grid.ColumnDefinitions> 
    <ToggleButton x:Name="TgBtIsActive" IsChecked="{Binding IsChecked}" IsThreeState="{Binding IsThreeState}" Grid.Column="0" Height="24" Width="40" click="TgBtIsActive_Click"/> 
    <templates:ExpanderDoubleClick x:Name="ModuleExpander" IsExpanded="{Binding IsExpanded, Mode=OneWay}" Height="auto" Template="{DynamicResource TemplateExpander}" Grid.Column="1" Margin="4,0,0,0" Collapsed="Expander_Collapsed" Expanded="Expander_Expanded" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"> 
     <templates:ExpanderDoubleClick.Resources> 
      <Style x:Key="ExpanderHeaderStyle" TargetType="{x:Type ToggleButton}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ToggleButton}"> 
          <Border x:Name="BorderIndent" BorderBrush="Gray" BorderThickness="1" Height="24" Width="558" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Padding="{Binding Indent}"> 
          ... my Header Content ... 
          </Border> 
          <ControlTemplate.Triggers> 
           <DataTrigger Binding="{Binding IsExpanded}" Value="true"> 
            <Setter Property="IsEnabled" TargetName="TbComment" Value="true"/> 
           </DataTrigger> 
           <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListViewItem}}" Value="true"> 
            <Setter Property="Background" TargetName="headerCanvas" Value="#999999"/> 
            <Setter Property="BorderBrush" TargetName="TbComment" Value="#666666"/> 
            <Setter Property="Foreground" TargetName="LbHeaderTitle" Value="White"/> 
           </DataTrigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </templates:ExpanderDoubleClick.Resources> 
     <Border Background="White" BorderBrush="#666666" BorderThickness="1,0,1,1" Height="136" Width="558"> 
      <Grid> 
       ... my Expanded Content ... 
      </Grid> 
     </Border> 
    </templates:ExpanderDoubleClick> 
</Grid> 

這裏的ExpanderDoubleClick.cs:

public class ExpanderDoubleClick: Expander 
{ 
    private static readonly DependencyPropertyKey IsMouseDoubleClickedPropertyKey = DependencyProperty.RegisterReadOnly(
     "IsMouseDoubleClicked",typeof(Boolean),typeof(ExpanderDoubleClick),new FrameworkPropertyMetadata(false)); 
    public static readonly DependencyProperty IsMouseDoubleClickedProperty = IsMouseDoubleClickedPropertyKey.DependencyProperty; 
    public Boolean IsMouseDoubleClicked 
    { 
     get { return (Boolean)GetValue(IsMouseDoubleClickedProperty); } 
    } 
    static ExpanderDoubleClick() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(ExpanderDoubleClick), new FrameworkPropertyMetadata(typeof(ExpanderDoubleClick))); 
    } 
    protected override void OnMouseDoubleClick(MouseButtonEventArgs e) 
    { 
     base.OnMouseDoubleClick(e); 
    } 
    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     ContentControl contentControl = base.GetTemplateChild("HeaderSite") as ContentControl; 
     if (contentControl != null) 
     { 
      contentControl.AddHandler(ContentControl.MouseDoubleClickEvent, new MouseButtonEventHandler(ExpanderHeader_MouseDoubleClick), true); 
     } 
    } 
    private void ExpanderHeader_MouseDoubleClick(Object sender, MouseButtonEventArgs e) 
    { 
     base.SetValue(IsMouseDoubleClickedPropertyKey, !IsMouseDoubleClicked); 
     base.IsExpanded= !base.IsExpanded; 
    } 
} 

選擇不工作,當我點擊擴展的頭,但如果我打開它,然後單擊expandedContent裏面,它選擇的項目!我錯過了什麼 ?感謝您的答覆。

+0

你應該花一些時間,以減少你的代碼到最小的例子。另外,我看不到'ExpanderHeaderStyle'在哪裏使用......只有定義在問題中可見。 – grek40

+0

ExpanderHeaderStyle在App.xaml中聲明用於動畫目的,而ToogleButton的Expander樣式返回到userControl 我不知道這是否是一種好的做法,但這是我發現避免複製動畫合併和展開的最佳方法物品 –

+0

......那不是你的問題。在xaml中有一個'