2012-04-09 19 views
5

पर गोलीबारी नहीं कर रही हैं मैं टचस्क्रीन के लिए डब्ल्यूपीएफ में विकास करने के लिए नया हूं, और मुझे हेरफेर घटनाओं की व्याख्या करने में परेशानी हो रही है। मैं जो करना चाहता हूं वह काफी सरल है मेरा मानना ​​है कि: जब उपयोगकर्ता UserControl पर कहीं भी पिन करता है, तो यह एक क्रिया करेगा।मैनिपुलेशन घटनाएं

तो, नियंत्रण मैं में (इस भूतल 2.0/विंडोज टच है):

XAML

<Grid Background="White" IsManipulationEnabled="True" 
ManipulationStarting="Grid_ManipulationStarting" 
ManipulationDelta="Grid_ManipulationDelta"> 
    <!--Some content controls--> 
</Grid> 

सी #

private void Grid_ManipulationStarting(object sender, ManipulationStartingEventArgs e) 
{ 
    e.ManipulationContainer = this; 
} 

private void Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) 
{ 
    //do the thing... you know, that thing you do 
} 

हालांकि, इनमें से कोई भी जब मैं स्क्रीन पर अपने हाथों को घुमाता हूं तो घटनाएं आग लगती हैं। मुझे लगता है कि मुझे इस स्थिति में घटना के मार्ग को समझना नहीं चाहिए। मेरी मॉनीटर (3 एम माइक्रो टच पीएक्स) को स्कैटरव्यू इटम्स जैसे टच इवेंट्स या बिल्ट-इन मैनिपुलेशन को समझने में कोई परेशानी नहीं हुई है।

संपादित करें: मैंने ग्रिड के अंदर से नियंत्रण हटा दिए और अब वे आग लग गए, इसलिए मुझे लगता है कि सामग्री से जोड़ों को अवरुद्ध किया जा रहा है। क्षमा करें, नियंत्रण की सामग्री के बारे में और अधिक स्पष्ट होना चाहिए था, क्योंकि ऐसा लगता है कि वे समस्या हैं।

विशेष रूप से मुझे लगता है कि इसे इस तथ्य के साथ करना है कि मेरे अंदर एक SurfaceListBox है। मुझे लगता है कि SurfaceListBox हेरफेर को रोक रहा है। क्या कोई रास्ता है जिसे मैं इसे दूर करने के लिए कह सकता हूं? मैं अभी भी डब्ल्यूपीएफ घटनाओं के तरीके के आसपास अपने सिर को लपेटने की कोशिश कर रहा हूं।

संपादित 2: कुछ और पूर्ण कोड पेस्ट करने के लिए जा रहे हैं।

SEMANTICPANEL.XAML पूर्ण

<UserControl x:Class="SemanticZoom.SemanticPanel" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:SemanticZoom" 
     xmlns:views="clr-namespace:SemanticZoom.Views" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<UserControl.Resources> 
</UserControl.Resources> 
<Grid Background="White" IsManipulationEnabled="True" ManipulationStarting="Grid_ManipulationStarting" ManipulationDelta="Grid_ManipulationDelta"> 
    <views:CategoryView x:Name="CategoryView"/> 
    <views:ShelfView x:Name="ShelfView" Visibility="Hidden" /> 
    <views:BookView x:Name="BookView" Visibility="Hidden" /> 
</Grid> 

SEMANTICPANEL.CS पूर्ण

public partial class SemanticPanel : UserControl 
{ 
    public SemanticPanel() 
    { 
     InitializeComponent(); 
     CategoryView.CategorySelected += new EventHandler(CategoryView_CategorySelected); 
     ShelfView.BookSelected += new EventHandler(ShelfView_BookSelected); 
     ShelfView.ZoomOut += new EventHandler(View_ZoomOut); 
    } 

    void View_ZoomOut(object sender, EventArgs e) 
    { 
     if (sender == ShelfView) 
     { 
      ShelfView.Visibility = System.Windows.Visibility.Hidden; 
      CategoryView.Visibility = System.Windows.Visibility.Visible; 
     } 
     else if (sender == BookView) 
     { 
      BookView.Visibility = System.Windows.Visibility.Hidden; 
      ShelfView.Visibility = System.Windows.Visibility.Visible; 
     } 
    } 

    void ShelfView_BookSelected(object sender, EventArgs e) 
    { 
     BookView.Books = ShelfView.BookList; 
     ShelfView.Visibility = System.Windows.Visibility.Hidden; 
     BookView.Visibility = System.Windows.Visibility.Visible; 
    } 

    void CategoryView_CategorySelected(object sender, EventArgs e) 
    { 
     ShelfView.Category = CategoryView.ActiveCategory; 
     ShelfView.Visibility = System.Windows.Visibility.Visible; 
     CategoryView.Visibility = System.Windows.Visibility.Hidden; 
     ShelfView.RefreshBooks(); 
    } 

    private void Grid_ManipulationStarting(object sender, ManipulationStartingEventArgs e) 
    { 
     //e.ManipulationContainer = this; 
    } 

    private void Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) 
    { 
     if (e.DeltaManipulation.Scale.X < 0) 
     { 
      if (ShelfView.Visibility == System.Windows.Visibility.Visible) 
      { 
       ShelfView.Visibility = System.Windows.Visibility.Hidden; 
       CategoryView.Visibility = System.Windows.Visibility.Visible; 
      } 
      else if (BookView.Visibility == System.Windows.Visibility.Visible) 
      { 
       BookView.Visibility = System.Windows.Visibility.Hidden; 
       ShelfView.Visibility = System.Windows.Visibility.Visible; 
      } 
     } 
    } 

CATEGORYVIEW.XAML

<UserControl x:Class="SemanticZoom.Views.CategoryView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:s="http://schemas.microsoft.com/surface/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<UserControl.Resources> 
    <!--CATEGORY TEMPLATE--> 
    <DataTemplate x:Name="CategoryTemplate" x:Key="CategoryTemplate"> 
     <s:SurfaceButton Background="Gray" Click="CategoryClicked" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="200" Width="300"> 
      <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Foreground="White" FontSize="20" FontWeight="Bold" /> 
     </s:SurfaceButton> 
    </DataTemplate> 
    <!--CATEGORY STYLE--> 
    <Style TargetType="{x:Type s:SurfaceListBoxItem}"> 
     <Setter Property="Width" Value="300"/> 
     <Setter Property="Height" Value="200"/> 
    </Style> 
</UserControl.Resources> 
<Grid> 
    <s:SurfaceListBox x:Name="CategoryList" ItemTemplate="{StaticResource CategoryTemplate}"> 
     <s:SurfaceListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel IsItemsHost="True" 
          Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type ScrollContentPresenter}, Mode=FindAncestor}}"/> 
      </ItemsPanelTemplate> 
     </s:SurfaceListBox.ItemsPanel> 
    </s:SurfaceListBox> 
</Grid> 

बस मुझे न्याय नहीं है क्योंकि एक) हाँ मैं अनुकरण करने के लिए अर्थ ज़ूम कोशिश कर रहा हूँ और ख) हाँ मैं इसके बारे में एक hacky काम कर रहा हूँ। मुझे बस एक साधारण काम करने की अवधारणा की आवश्यकता है। प्रत्येक विचार मूल रूप से श्रेणी दृश्य के समान है।

+0

आप ई। मैनिपुलेशनकंटनर क्यों बदलते हैं? –

+0

क्या आप भी सुनिश्चित हैं कि आप हमारे ग्रिड के क्षेत्र में स्क्रीन को स्पर्श करें? क्या यह काफी बड़ा है? –

+0

@AndriyBuday: मुझे वास्तव में पता नहीं है, यह एक नमूना का हिस्सा था जिसे मैंने देखा था। इससे कोई फर्क नहीं पड़ता क्योंकि इसे कभी नहीं कहा जाता है, लेकिन जब तक मैं काम नहीं करता तब तक मैं इसे तब तक टिप्पणी करूंगा। ग्रिड अभी पूर्णस्क्रीन है, और पृष्ठभूमि रंग इसकी पुष्टि करता है। तो मैं कम से कम इसे याद नहीं कर रहा हूँ। –

उत्तर

0

आपकी सहायता एंड्री के लिए धन्यवाद, लेकिन ऐसा लगता है कि समस्या इतनी सरल थी जितनी मेरी मॉनीटर बहुत असंवेदनशील थी। मैनिप्ल्यूशन इवेंट्स पर सभी सामग्री के लिए इवेंट हुक हटा दिए जाने के बाद, केवल माता-पिता ग्रिड में हुक छोड़कर, और फिर स्क्रीन पर दो अंगुलियों के साथ बहुत कठिन दबाया गया, मुझे घटनाएं आग लग गईं। हालांकि, रूटिंग के साथ शायद थोड़ा और गड़बड़ करने की जरूरत है।

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