Developerzzz
Developerzzz

Reputation: 1126

Windows phone 8.1 xaml Listview selected Item style

Dear all i am new to windows phone and xaml. i have listview on my pivot template now i just want that when i select an item in the listview the backgroud color changed here is my xaml code

                        <ListView x:Name="LVPrimary" Grid.Row="2" Grid.Column="0" 
                        ItemsSource="{Binding}"
                        IsItemClickEnabled="True"
                        ItemClick="LVPrimary_ItemClick"  

                        ContinuumNavigationTransitionInfo.ExitElementContainer="True">

                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="auto"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Border Width="40" Height="40" CornerRadius="5,5,5,5">
                                        <Border.Background>
                                            <ImageBrush ImageSource="{Binding ImagePath}" />
                                        </Border.Background>
                                    </Border>
                                    <StackPanel Grid.Row="0" Grid.Column="1" Margin="0,0,0,0">
                                        <TextBlock 
                                Text="{Binding Code}"
                                TextWrapping="Wrap"
                                Pivot.SlideInAnimationGroup="1"
                                CommonNavigationTransitionInfo.IsStaggerElement="True"
                                Style="{ThemeResource ListViewItemTextBlockStyle}"
                                Margin="0,0,19,0"/>
                                        <TextBlock
                                            TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"
                                Text="{Binding Name}"
                                Pivot.SlideInAnimationGroup="2" 
                                CommonNavigationTransitionInfo.IsStaggerElement="True" 
                                Style="{ThemeResource ListViewItemContentTextBlockStyle}"
                                Margin="0,0,5,0"/>
                                    </StackPanel>
                                </Grid>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>

Upvotes: 1

Views: 5497

Answers (2)

Rakshith
Rakshith

Reputation: 387

Below solution works fine for me..

 var griditem = ListViewName.ContainerFromItem(ListViewName.SelectedItem);                     
 var a = ((Windows.UI.Xaml.Controls.Panel)((Windows.UI.Xaml.Controls.ContentControl)listViewItem).ContentTemplateRoot
 a.Background=  new SolidColorBrush(Windows.UI.Colors.Red);


 var textitem = ListViewName.ContainerFromItem(ListViewName.SelectedItem);                     
 var a = ((Windows.UI.Xaml.Controls.Panel)((Windows.UI.Xaml.Controls.ContentControl)listViewItem).ContentTemplateRoot).Children;
 ((TextBlock)a.ElementAt(0)).Text= "Your Text";

Upvotes: 1

loop
loop

Reputation: 9242

Sorry for the late reply. You will have a List<ItemClass> and ObservableCollection<ItemClass>.

What you can do is - Define a SolidColorBrush Property and bind this property to your Item Grid. I have created this example : -

Here is my Item Class : - Make sure you Implement INotifyPropertyChanged.

public class Item : INotifyPropertyChanged
{
    public string Something { get; set; }

    public SolidColorBrush ItemBackground
    {
        get { return _itemBackground; }
        set
        {
            _itemBackground = value;
            OnPropertyChanged("ItemBackground");
        }
    }

    private SolidColorBrush _itemBackground;


    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

And My sample & simple Xaml is :-

<ListView x:Name="LVPrimary" IsItemClickEnabled="True" ItemClick="ListViewBase_OnItemClick">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Background="{Binding ItemBackground}" Height="100" Width="200">
                    <TextBlock Text="{Binding Something}"></TextBlock>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
 </ListView>

And on Onlick Event I just changed the color of the clicked item like this :-

private void ListViewBase_OnItemClick(object sender, ItemClickEventArgs e)
{
        ((Item)e.ClickedItem).ItemBackground = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255));
}

Hope it will help you.

Upvotes: 1

Related Questions