2012-03-13 27 views
6

Đây là mã của ItemsControl của tôi mà phóng to các mục khi chuột di chuyển qua.
Tôi không quản lý để tăng ZIndex của mục được thu phóng hiện tại để đặt nó lên các mục khác.Sửa đổi ZIndex của một mục trong một ItemsControl

<ItemsControl ItemsSource="{Binding Path=Value}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Name}" 
         RenderTransformOrigin="0.5 0.5"> 
       <TextBlock.Style> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Style.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="RenderTransform"> 
            <Setter.Value> 
             <ScaleTransform ScaleX="1.5" 
                 ScaleY="1.5" /> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

Tôi đã cố thay đổi trực tiếp ZIndex trong trình kích hoạt nhưng không hoạt động.
Có vẻ như tôi cần thay đổi ZIndex trong ContentPresenter, đó là Parent of the TextBlock trong VisualTree và không trực tiếp trong TextBlock.

<Setter Property="Panel.ZIndex" Value="99" /> 

Vì vậy, tôi đã cố gắng để thay đổi ZIndex trong ContentPresenter, nhưng nó vẫn không hoạt động

<ItemsControl.ItemContainerStyle> 
    <Style TargetType="{x:Type ContentPresenter}"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Panel.ZIndex" Value="99" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</ItemsControl.ItemContainerStyle> 

Có ai biết làm thế nào nó hoạt động?

+0

Làm việc tốt cho tôi, sử dụng Canvas. Vì vậy, bạn có thể có một vấn đề khác. Bạn sử dụng loại bảng điều khiển nào? – dowhilefor

+0

Tôi sử dụng WrapPanel. Giải pháp nào phù hợp với bạn? – Nicolas

Trả lời

10

Tôi vừa thử chính xác những gì bạn đã đề xuất trong WPF 4 và nó hoạt động tốt.

MainWindow.xaml:

<Window x:Class="SO9687674.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <ItemsControl ItemsSource="{Binding}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}"> 
       <TextBlock.Style> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Style.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="RenderTransform"> 
            <Setter.Value> 
             <ScaleTransform ScaleX="2.5" 
                 ScaleY="2.5" /> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
       </TextBlock> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     <ItemsControl.ItemContainerStyle> 
      <Style TargetType="{x:Type ContentPresenter}"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Panel.ZIndex" Value="99" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 
    </ItemsControl> 
</Window> 

MainWindow.xaml.cs:

using System.Collections.Generic; 
using System.Windows; 

namespace SO9687674 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      this.DataContext = new List<string> 
      { 
       "One", 
       "two", 
       "three" 
      }; 
     } 
    } 
} 

làm cho bạn nghĩ gì nó không làm việc? Bạn đã sử dụng Snoop để xác minh chưa?

+0

Tôi nghĩ rằng nó không hoạt động vì tôi thấy nó không :) Tôi snoop nó và ZIndex không thay đổi khi con chuột của tôi đi vào. Tôi sẽ thử ví dụ của bạn trong một dự án mới. – Nicolas

+0

@Nicolas: có nguy cơ bảo trợ, bạn đang rình mò * vùng chứa *, không phải là chính 'TextBlock', đúng không? –

+0

@Nicolas cách duy nhất có thể không hoạt động là nếu bạn có thứ gì khác viết thuộc tính Zindex. Kiểm tra [ưu tiên giá trị] (http://msdn.microsoft.com/en-us/library/ms743230.aspx#listing), nếu một cái gì đó có ưu tiên cao hơn là viết zindex, giá trị kích hoạt là "bị bỏ qua", không thực sự bị bỏ qua nhưng không được sử dụng miễn là ưu tiên cao hơn ghi giá trị. – dowhilefor

Các vấn đề liên quan