2015-12-21 51 views
0

請找到下面的代碼。我已經使用itemscontrol和數據模板。 內部數據模板,我有我需要的網格和邊框。 我已經使用DataTemplate.Triggers爲datatemplate編寫了樣式。 樣式應用於鼠標懸停,但樣式不適用於Isselected。 如何實現isselected style ???
的XAML:DataTemplate中的IsSelected樣式,觸發器不適用

<ItemsControl HorizontalAlignment="Center" Name="lvDataBinding"> 
 
       <ItemsControl.ItemTemplate> 
 
        <DataTemplate>   
 
         <Grid Margin="10,0,5,0" Width="500"> 
 
          <Grid.RowDefinitions> 
 
           <RowDefinition Height="120*"/> 
 
           <RowDefinition Height="5"/> 
 
           <RowDefinition Height="120*"/> 
 
           <RowDefinition Height="5"/> 
 
           <RowDefinition Height="120*"/> 
 
           <RowDefinition Height="5"/> 
 
           <RowDefinition Height="120*"/> 
 
          </Grid.RowDefinitions> 
 
          <Border x:Name="FirstSelectionBorder" BorderBrush="#FF0087AA" > 
 
           <Border x:Name="FirstNormalBorder" BorderBrush="#FF555555" BorderThickness="1"> 
 
            <Grid x:Name="FirstGrid"> 
 
             <Grid.ColumnDefinitions> 
 
              <ColumnDefinition Width="10"/> 
 
              <ColumnDefinition Width="300*"/> 
 
              <ColumnDefinition Width="5"/> 
 
              <ColumnDefinition Width="100"/> 
 
              <ColumnDefinition Width="10"/> 
 
              <ColumnDefinition Width="100"/> 
 
              <ColumnDefinition Width="23"/> 
 
             </Grid.ColumnDefinitions> 
 
             <Grid Grid.Column="1"> 
 
              <Grid.RowDefinitions> 
 
               <RowDefinition Height="10"/> 
 
               <RowDefinition Height="20"/> 
 
               <RowDefinition Height="10"/> 
 
               <RowDefinition Height="15"/> 
 
               <RowDefinition Height="5"/> 
 
               <RowDefinition Height="15"/> 
 
               <RowDefinition Height="5"/> 
 
               <RowDefinition Height="15"/> 
 
               <RowDefinition Height="5"/> 
 
               <RowDefinition Height="15"/> 
 
              </Grid.RowDefinitions> 
 
              <Grid.ColumnDefinitions> 
 
               <ColumnDefinition Width="100"/> 
 
               <ColumnDefinition Width="5"/> 
 
               <ColumnDefinition Width="100"/> 
 
              </Grid.ColumnDefinitions> 
 
              <TextBlock Grid.Row="3" Text="Code" Foreground="#FF555555" FontSize="10"/> 
 
              <Label Grid.Row="3" Grid.Column="1" Content=":" Foreground="#FF555555" FontSize="10"/> 
 
              <TextBlock Grid.Row="3" Grid.Column="2" Text="{Binding Name}" Foreground="#FF555555" FontSize="10" /> 
 
              <TextBlock Grid.Row="5" Text="Serial Number" Foreground="#FF555555" FontSize="10"/> 
 
              <Label Grid.Row="5" Grid.Column="1" Content=":" Foreground="#FF555555" FontSize="10"/> 
 
              <TextBlock Grid.Row="5" Grid.Column="2" Text="{Binding Age}" Foreground="#FF555555" FontSize="10"/> 
 
              <TextBlock Grid.Row="7" Text="Age" Foreground="#FF555555" FontSize="10"/> 
 
              <Label Grid.Row="7" Grid.Column="1" Content=":" Foreground="#FF555555" FontSize="10"/> 
 
              <TextBlock Grid.Row="7" Grid.Column="2" Text="{Binding Mail}" Foreground="#FF555555" FontSize="10"/> 
 
             </Grid> 
 
             <Button x:Name="OKButton" Grid.Column="3" Content="OK" VerticalAlignment="Bottom" Margin="0,0,0,10" > 
 
    
 
             </Button> 
 
             <Button x:Name="Cancelbutton" Grid.Column="5" Content="Cancel" VerticalAlignment="Bottom" Margin="0,0,0,10"> 
 
    
 
             </Button> 
 
             <Button x:Name="FirstDeleteButton" Grid.Column="6" VerticalAlignment="top" Margin="3,5,2,0" /> 
 
            </Grid> 
 
           </Border>       
 
           </Border> 
 
         </Grid> 
 
         
 
         <DataTemplate.Triggers> 
 
          <Trigger Property="IsMouseOver" Value="True"> 
 
           <Setter TargetName="FirstNormalBorder" Property="Background" Value="Green"/> 
 
          </Trigger> 
 
          <Trigger Property="IsSelected" Value="True"> 
 
           <Setter TargetName="FirstNormalBorder" Property="Background" Value="Red"/> 
 
          </Trigger> 
 
         </DataTemplate.Triggers> 
 
        </DataTemplate> 
 
       </ItemsControl.ItemTemplate> 
 
      </ItemsControl>

cs: 
public MainWindow() 
     {   
      InitializeComponent(); 

      List<User> items = new List<User>(); 
      items.Add(new User() { Name = "John Doe", Age = 42, Mail = "[email protected]" }); 
      items.Add(new User() { Name = "Jane Doe", Age = 39, Mail = "[email protected]" }); 
      items.Add(new User() { Name = "Sammy Doe", Age = 13, Mail = "[email protected]" }); 
      lvDataBinding.ItemsSource = items; 
     } 

    } 

    public class User 
    { 
     public string Name { get; set; } 

     public int Age { get; set; } 

     public string Mail { get; set; } 
    } 

回答

1

ItemsControl不跟蹤的SelectedItem。您可以使用ListBox

<ListBox HorizontalAlignment="Center" 
     Name="lvDataBinding"> 
    <ListBox.Resources> 
     <!-- Removes default blue background for selected item --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
         Color="Transparent" /> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid Margin="10,0,5,0" 
        Width="500"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="120*" /> 
        <RowDefinition Height="5" /> 
        <RowDefinition Height="120*" /> 
        <RowDefinition Height="5" /> 
        <RowDefinition Height="120*" /> 
        <RowDefinition Height="5" /> 
        <RowDefinition Height="120*" /> 
       </Grid.RowDefinitions> 
       <Border x:Name="FirstSelectionBorder" 
         BorderBrush="#FF0087AA"> 
        <Border x:Name="FirstNormalBorder" 
          BorderBrush="#FF555555" 
          BorderThickness="1"> 
         <Grid x:Name="FirstGrid"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="10" /> 
           <ColumnDefinition Width="300*" /> 
           <ColumnDefinition Width="5" /> 
           <ColumnDefinition Width="100" /> 
           <ColumnDefinition Width="10" /> 
           <ColumnDefinition Width="100" /> 
           <ColumnDefinition Width="23" /> 
          </Grid.ColumnDefinitions> 
          <Grid Grid.Column="1"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="10" /> 
            <RowDefinition Height="20" /> 
            <RowDefinition Height="10" /> 
            <RowDefinition Height="15" /> 
            <RowDefinition Height="5" /> 
            <RowDefinition Height="15" /> 
            <RowDefinition Height="5" /> 
            <RowDefinition Height="15" /> 
            <RowDefinition Height="5" /> 
            <RowDefinition Height="15" /> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="100" /> 
            <ColumnDefinition Width="5" /> 
            <ColumnDefinition Width="100" /> 
           </Grid.ColumnDefinitions> 
           <TextBlock Grid.Row="3" 
              Text="Code" 
              Foreground="#FF555555" 
              FontSize="10" /> 
           <Label Grid.Row="3" 
             Grid.Column="1" 
             Content=":" 
             Foreground="#FF555555" 
             FontSize="10" /> 
           <TextBlock Grid.Row="3" 
              Grid.Column="2" 
              Text="{Binding Name}" 
              Foreground="#FF555555" 
              FontSize="10" /> 
           <TextBlock Grid.Row="5" 
              Text="Serial Number" 
              Foreground="#FF555555" 
              FontSize="10" /> 
           <Label Grid.Row="5" 
             Grid.Column="1" 
             Content=":" 
             Foreground="#FF555555" 
             FontSize="10" /> 
           <TextBlock Grid.Row="5" 
              Grid.Column="2" 
              Text="{Binding Age}" 
              Foreground="#FF555555" 
              FontSize="10" /> 
           <TextBlock Grid.Row="7" 
              Text="Age" 
              Foreground="#FF555555" 
              FontSize="10" /> 
           <Label Grid.Row="7" 
             Grid.Column="1" 
             Content=":" 
             Foreground="#FF555555" 
             FontSize="10" /> 
           <TextBlock Grid.Row="7" 
              Grid.Column="2" 
              Text="{Binding Mail}" 
              Foreground="#FF555555" 
              FontSize="10" /> 
          </Grid> 
          <Button x:Name="OKButton" 
            Grid.Column="3" 
            Content="OK" 
            VerticalAlignment="Bottom" 
            Margin="0,0,0,10"> 

          </Button> 
          <Button x:Name="Cancelbutton" 
            Grid.Column="5" 
            Content="Cancel" 
            VerticalAlignment="Bottom" 
            Margin="0,0,0,10"> 

          </Button> 
          <Button x:Name="FirstDeleteButton" 
            Grid.Column="6" 
            VerticalAlignment="top" 
            Margin="3,5,2,0" /> 
         </Grid> 
        </Border> 
       </Border> 
      </Grid> 

      <DataTemplate.Triggers> 
       <Trigger Property="IsMouseOver" 
         Value="True"> 
        <Setter TargetName="FirstNormalBorder" 
          Property="Background" 
          Value="Green" /> 
       </Trigger> 

       <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={ 
        RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem }}}" 
          Value="True"> 
        <Setter TargetName="FirstNormalBorder" Property="Background" 
          Value="Red" /> 
       </DataTrigger> 

      </DataTemplate.Triggers> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox>