windows phone 7 - TiltEffect और LongListSelector




windows-phone-7 silverlight-toolkit (4)

TiltEffect.IsTiltEnabled = "सत्य" फोनअनुप्रयोग पृष्ठ तत्व पर जाता है, एक बटन को शामिल करने के लिए अपना आइटम बदलें और यह काम करेगा।

https://code.i-harness.com

मैं एक LongListSelector में सिल्वरलाइट टूलकिट से TiltEffect का उपयोग करने की कोशिश कर रहा LongListSelector । एक्सएएमएल में यह तत्व कैसे घोषित किया जाता है:

<controls:PivotItem Header="Pivot Item">

  <controls:PivotItem.Resources>

    <DataTemplate x:Key="LongListSelectorGroupHeaderTemplate">
      <Border Background="{StaticResource PhoneAccentBrush}"
              Margin="10,20,0,0"
              HorizontalAlignment="Left"
              VerticalAlignment="Center"
              Height="{StaticResource PhoneFontSizeExtraExtraLarge}"
              Width="{StaticResource PhoneFontSizeExtraExtraLarge}">
        <TextBlock Text="{Binding Name}"
                   Style="{StaticResource PhoneTextExtraLargeStyle}"
                   Foreground="White"
                   VerticalAlignment="Bottom"
                   HorizontalAlignment="Left" />
      </Border>
    </DataTemplate>

    <DataTemplate x:Key="LongListSelectorGroupItemTemplate">
      <Border Background="{StaticResource PhoneAccentBrush}"
              Margin="10"
              Height="{StaticResource PhoneFontSizeExtraExtraLarge}"
              Width="{StaticResource PhoneFontSizeExtraExtraLarge}">
        <TextBlock Text="{Binding Name}"
                   Style="{StaticResource PhoneTextExtraLargeStyle}"
                   Foreground="White"
                   VerticalAlignment="Bottom"
                   HorizontalAlignment="Left" />
      </Border>
    </DataTemplate>

    <DataTemplate x:Key="LongListSelectorItemTemplate">
      <StackPanel Grid.Column="1"
                  VerticalAlignment="Top"
                  Orientation="Horizontal"
                  toolkit:TiltEffect.IsTiltEnabled="True">

        <toolkit:GestureService.GestureListener>
          <toolkit:GestureListener Tap="OnLongListSelectorTapped" />
        </toolkit:GestureService.GestureListener>

        <Image  Source="{Binding ImageSource}"
                MinHeight="32"
                MinWidth="32"
                MaxHeight="48"
                MaxWidth="48" />

        <TextBlock Text="{Binding Name}"
                   Style="{StaticResource PhoneTextExtraLargeStyle}"
                   Margin="12,10,12,0" />

      </StackPanel>
    </DataTemplate>

  </controls:PivotItem.Resources>

  <toolkit:LongListSelector ItemTemplate="{StaticResource LongListSelectorItemTemplate}"
                            GroupHeaderTemplate="{StaticResource LongListSelectorGroupHeaderTemplate}"
                            GroupItemTemplate="{StaticResource LongListSelectorGroupItemTemplate}">

    <toolkit:LongListSelector.GroupItemsPanel>
      <ItemsPanelTemplate>
        <toolkit:WrapPanel />
      </ItemsPanelTemplate>
    </toolkit:LongListSelector.GroupItemsPanel>

  </toolkit:LongListSelector>

</controls:PivotItem>

दुर्भाग्य से, यह काम नहीं कर रहा है किसी आइटम पर टैप करते समय टैप इशारा आग लग जाती है, लेकिन एनीमेशन नहीं खेलता है। मैंने TiltEffect.IsTiltEnabled सेट करने की कोशिश की है। LongListSelector , PivotItem और माता-पिता के पृष्ठ पर कोई संपत्ति नहीं है, लेकिन उनमें से कोई भी काम नहीं करता है

मेरे पास एक अन्य PivotItem है जिसमें एक ItemTemplate ListBox साथ एक साधारण LongListSelectorItemTemplate है जो कि ऊपर दी LongListSelectorItemTemplate समान है। TiltEffect.IsTiltEnabled संपत्ति को अपने DataTemplate भीतर true करने के लिए वांछित के रूप में काम करता है।

क्या मैं LongListSelector के मामले में गलत कर रहा हूँ?


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

TiltEffect.TiltableItems.Add(typeof(MyTiltingContentControl))

मैं अपने बटन पर यह शैली का उपयोग अदृश्य बनाने के लिए करता हूं।

<Style x:Key="TiltButtonStyle" TargetType="Button">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="BorderBrush" Value="{x:Null}" />
        <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/>
        <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}"/>
        <Setter Property="Padding" Value="0,0,0,0"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid Background="Transparent">
                        <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="0" Margin="0,8,0,0">
                            <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

एक नया नियंत्रण बनाने के लिए stackpanel संभालता है

public class TiltStackPanel : StackPanel
    {
        public TiltStackPanel() {}
    }

तब इस नियंत्रण को जोड़ें TiltEffect.cs

static TiltEffect()
    {
      // For extra fun, add this to the list: typeof(Microsoft.Phone.Controls.PhoneApplicationPage)
      TiltableItems = new List<Type>() { typeof(ButtonBase), typeof(ListBoxItem), typeof(TiltStackPanel)};
      UseLogarithmicEase = false;
    }

इस TiltStackPanel का उपयोग करें अपने टेम्पलेट के longlistselector के अंदर


यदि आप एक ListBoxItem में अपने आइटम टाइम्प्लेट को लपेटते हैं, तो यह तदनुसार झुका जाएगा:

<DataTemplate x:Key="LongListSelectorItemTemplate">
  <ListBoxItem>
    <StackPanel Grid.Column="1"
                VerticalAlignment="Top"
                Orientation="Horizontal"
                toolkit:TiltEffect.IsTiltEnabled="True">

      <toolkit:GestureService.GestureListener>
        <toolkit:GestureListener Tap="OnLongListSelectorTapped" />
      </toolkit:GestureService.GestureListener>

      <Image  Source="{Binding ImageSource}"
              MinHeight="32"
              MinWidth="32"
              MaxHeight="48"
              MaxWidth="48" />

      <TextBlock Text="{Binding Name}"
                 Style="{StaticResource PhoneTextExtraLargeStyle}"
                 Margin="12,10,12,0" />
    </StackPanel>
  </ListBoxItem>
</DataTemplate>