2012-03-13 15 views
6

यहां मेरे आइटम नियंत्रण का कोड है जो माउस पर जाने पर आइटम्स पर ज़ूम करता है।
मैं वर्तमान ज़ूम किए गए आइटम के ज़िन्डेक्स को दूसरों पर रखने के लिए प्रबंधित नहीं करता हूं।किसी आइटम में आइटम के ZIndex को संशोधित करें

<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> 

मैं ट्रिगर में सीधे zindex बदलने की कोशिश की, लेकिन यह काम नहीं करता।
ऐसा लगता है कि मुझे ZIndex को ContentPresenter में बदलने की आवश्यकता है जो VisualTree में टेक्स्टब्लॉक का अभिभावक है और सीधे टेक्स्टब्लॉक में नहीं है।

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

तो मैं ContentPresenter में zindex बदलने की कोशिश की, लेकिन यह अभी भी

<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> 

काम नहीं करता है किसी को पता है कि यह कैसे काम करता है?

+0

कैनवास का उपयोग करके मेरे लिए ठीक काम करता है। तो आप शायद एक और समस्या है। आप किस प्रकार का पैनल उपयोग करते हैं? – dowhilefor

+0

मैं एक रैपपैनल का उपयोग करता हूं। कौन सा समाधान आपके लिए काम करता है? – Nicolas

उत्तर

10

मैंने अभी कोशिश की है कि आपने डब्ल्यूपीएफ 4 में क्या सुझाव दिया है और यह ठीक काम करता है।

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" 
      }; 
     } 
    } 
} 

आपको क्या लगता है यह काम नहीं कर रहा है? क्या आपने सत्यापित करने के लिए स्नूप का उपयोग किया है?

+0

मुझे लगता है कि यह काम नहीं करता है क्योंकि मुझे लगता है कि यह नहीं है :) मैं इसे छीनता हूं और जब मेरा माउस चालू होता है तो ज़िन्डेक्स नहीं बदलता है। मैं एक ताजा परियोजना में अपने उदाहरण की कोशिश करूंगा। – Nicolas

+0

@ निकोलस: संरक्षकता के जोखिम पर, आप * कंटेनर * को झुका रहे हैं, न कि 'टेक्स्टब्लॉक' स्वयं, सही? –

+0

@ निकोलस एकमात्र तरीका है जो काम नहीं कर सकता है यदि आपके पास ज़िन्डेक्स संपत्ति लिखने के लिए कुछ और है। [मान प्राथमिकता] (http://msdn.microsoft.com/en-us/library/ms743230.aspx#listing) की जांच करें, यदि उच्च प्राथमिकता वाला कुछ ज़िन्डेक्स लिख रहा है, तो ट्रिगर मान "अनदेखा" है, न कि वास्तव में अनदेखा किया जाता है लेकिन जब तक उच्च प्राथमिकता मान लिखती है तब तक इसका उपयोग नहीं किया जाता है। – dowhilefor

संबंधित मुद्दे