2014-07-22 2 views
0

탭 이벤트에서 스택 패널 배경색을 강조 표시하려고합니다. Stackpanel은 longlistselector 안에 있습니다. 내가 특정 요소에 누를 때 나는 코드WP8 스토리 보드 컬러 애니메이션 잘못된 작업 예외가 발생했습니다.

XAML 코드

**<phone:PhoneApplicationPage.Resources> 
     <local:BooleanToForegroundConverter x:Key="BooleanToForegroundConverter"/> 
<Style x:Key="MyLongListMultiSelectorItemListStyle" 
     TargetType="toolkit:LongListMultiSelectorItem"> 
      <Style.Setters> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="toolkit:LongListMultiSelectorItem"> 
          <StackPanel 
         Background="{Binding RelativeSource={RelativeSource TemplatedParent}, 
              Path=IsSelected, Mode=TwoWay, 
              Converter={StaticResource BooleanToForegroundConverter}}"> 
</phone:PhoneApplicationPage.Resources>** 
          </StackPanel> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style.Setters> 
     </Style> 
    <toolkit:LongListMultiSelector IsGroupingEnabled="True" 
                SelectionChanged="lstSongs_SelectionChanged" 
                GroupHeaderTemplate="{StaticResource BuddiesGroupHeaderTemplate}" 
                Background="Transparent" 
                JumpListStyle="{StaticResource AddrBookJumpListStyle}" 
                HideEmptyGroups="True" 

                x:Name="lstSongs" 
                toolkit:TiltEffect.IsTiltEnabled="True"   
                ItemsSource="{Binding Songs}" 
           **ItemContainerStyle="{StaticResource MyLongListMultiSelectorItemListStyle}"**      
                IsSelectionEnabledChanged="lstSongs_IsSelectionEnabledChanged" 
                > 
           <toolkit:LongListMultiSelector.ItemTemplate> 
          <DataTemplate > 
           <StackPanel 
            Margin="-40,0,0,17" 
            Width="432" 
            Height="78" 
            Tap="OnTap" 
            > 
            <TextBlock 
             Text="{Binding Name}" 
             Margin="0,-15,0,0" 
             Style="{StaticResource PhoneTextExtraLargeStyle}" 
             Padding="0,0,0,0"/> 
            <TextBlock 
             Text="{Binding Artist.Name}" 
             Margin="12,-6,12,0" 

             Style="{StaticResource PhoneTextSubtleStyle}"/> 
           </StackPanel> 
          </DataTemplate> 
         </toolkit:LongListMultiSelector.ItemTemplate> 
          </toolkit:LongListMultiSelector> 

그리고 변환기 구현

namespace musicplayer 
{ 
    class BooleanToForegroundConverter:IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return ((bool)value) ? App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush:new SolidColorBrush(Colors.Black); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new System.NotImplementedException(); 
     } 
    } 
} 

**C# code ontap event** 

    private void OnTap(object sender, System.Windows.Input.GestureEventArgs e) 
      { 
       //BackgroundAudioPlayer.Instance.Track = ((FrameworkElement)sender).DataContext as AudioTrack; 
       //BackgroundAudioPlayer.Instance.Play(); 
       Storyboard storyBoard = new Storyboard(); 
       ColorAnimation animation = new ColorAnimation(); 

       animation.To = (System.Windows.Media.Color)App.Current.Resources["PhoneAccentColor"]; 
       animation.AutoReverse = true; 
       animation.Duration = new Duration(TimeSpan.FromMilliseconds(1000)); 
       StackPanel sp = sender as StackPanel; 
       Storyboard.SetTarget(animation, sp); 
       PropertyPath colorTargetPath = new PropertyPath("(Panel.Background).(SolidColorBrush.Color)"); 
       Storyboard.SetTargetProperty(animation, colorTargetPath); 
       storyBoard.Children.Add(animation); 
       storyBoard.Begin(); 
     } 

다음과 같다하여 강조하고자하지만 잘못된 동작을 받고 있어요 storyBoard.Begin();에 대한 예외; 선. 내가 무엇이 부족합니까 ?? 나는 지금 막 창 전화 8을 배우기 시작한다 그래서 어떤 도움든지 아주 평가된다

답변

0

첫째로, 코드 숨김에서 이것을하지 말라. LongListMultiSelectorItem 스타일을 재정의하고 원하는 요소에 대해 변환기를 사용하십시오. 다음과 같은 것

<Style x:Key="MyLongListMultiSelectorItemListStyle" 
     TargetType="toolkit:LongListMultiSelectorItem"> 
    <Style.Setters>     
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="toolkit:LongListMultiSelectorItem"> 
        <StackPanel 
         Background="{Binding RelativeSource={RelativeSource TemplatedParent}, 
              Path=IsSelected, Mode=TwoWay, 
              Converter={StaticResource BooleanToForegroundConverter}}">         
         </StackPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style.Setters> 
    </Style> 

나는 변환기 구현을 게시하지 않는다. 상당히 간단하다. 부울 값을 기반으로 원하는 브러시를 반환합니다.

+0

저는 Windows 전화 개발을 처음 사용합니다. 이 코드에서 무슨 일이 일어나는지 설명해 주시겠습니까?> Background = "{RelativeSource TemplatedParent}, {RelativeSource TemplatedParent}, Path = IsSelected, Mode = TwoWay, Converter = {StaticResource BooleanToForegroundConverter}}" onTap of stackpanel – Archana

+0

LongListMultiSelectorItem에는 부울 IsSelected 종속성 속성이 있습니다.이 속성은 항목을 선택/선택 취소 할 때마다 업데이트됩니다. 기본적으로 LongListMultiSelector의 항목을 두드리면 해당 속성이 트윅됩니다. 이 XAML 줄은 스택 패널의 배경을 해당 속성에 바인딩하고 변환기를 사용하여 원하는 브러시를 반환합니다. – Pantelis

+0

내가 제안한 것을 사용하려고합니다. 하지만 이제 예외가 발생했습니다 \t {System.Windows.Markup.XamlParseException : 'musicplayer.BooleanToForegroundConverter'형식의 인스턴스를 만들 수 없습니다. 나는 수정 한 코드를 수정했다. – Archana

관련 문제