Ich versuche, das ausgewählte Element in einem GridView (Windows Phone 8.1 C#/XAML App) hervorgehoben zu werden. Ich habe die GridViewItemStyle mit Mischung extrahiert und es enthält folgende Komponenten:WP8.1 XAML - Wie erhalte ich ein GridView-Objekt, das angezeigt wird, wenn es ausgewählt ist?
<Border x:Name="SelectedBorder" BorderBrush="{ThemeResource ListViewItemSelectedBackgroundThemeBrush}" BorderThickness="{ThemeResource GridViewItemMultiselectBorderThickness}" IsHitTestVisible="False" Opacity="0">
<Grid x:Name="SelectedCheckMark" HorizontalAlignment="Right" Height="34" Opacity="0" VerticalAlignment="Top" Width="34">
<Path x:Name="SelectedEarmark" Data="M0,0 L40,0 L40,40 z" Fill="{ThemeResource ListViewItemSelectedBackgroundThemeBrush}" Stretch="Fill"/>
<Path x:Name="SelectedGlyph" Data="M0,123 L39,93 L124,164 L256,18 L295,49 L124,240 z" Fill="{ThemeResource ListViewItemCheckThemeBrush}" FlowDirection="LeftToRight" HorizontalAlignment="Right" Height="14.5" Margin="0,1,1,0" Stretch="Fill" VerticalAlignment="Top" Width="17"/>
</Grid>
</Border>
ich die Bürste Farben dieses XAML verwendet definiert haben und vorübergehend die Opazität auf 1 so eingestellt, dass ich überprüfen kann es anzeigt werden soll. So weit, ist es gut.
Es gibt auch eine visuelle Statusgruppe im gleichen Stil Definition:
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected"/>
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="CheckGlyph"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="SelectedCheckMark"/>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedUnfocused">
<Storyboard>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="CheckGlyph"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="SelectedCheckMark"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
aber wenn ein Element ausgewählt wird, ist es nicht die visuelle Anzeige gewinnen. Der XAML, der den Indikator anzeigt, funktioniert eindeutig, also versuche ich zu verstehen, warum die visuelle Statusgruppe nicht ist, insbesondere da diese direkt aus Blend stammt.
Die Gridview Definition lautet wie folgt:
<GridView
AutomationProperties.AutomationId="ItemListViewSection2"
AutomationProperties.Name="Items In Group"
SelectionMode="Single"
IsItemClickEnabled="True"
ItemsSource="{Binding GroupMembers}"
ItemTemplate="{StaticResource Individual80ItemTemplate}"
ItemContainerStyle="{StaticResource GridViewItemStyle1}"
ItemClick="ItemView_ItemClick"
ContinuumNavigationTransitionInfo.ExitElementContainer="True"
SelectionChanged="itemView_SelectionChanged"
Loaded="itemGridView_Loaded"/>
aktualisieren: Wenn ich von Single Selection auf mehr ändern, die gute Sache ist, dass die SelectedEarmark und SelectedGlyph jetzt erscheinen als jedes Element ausgewählt ist ... das Schlimme ist jedoch, dass die SelectedBorder für alle Einträge sichtbar gemacht wird, die durch ein anderes Bit von Visual Staat stuffery ausgelöst zu sein scheint:
<VisualStateGroup x:Name="MultiSelectStates">
<VisualStateGroup.Transitions>
<VisualTransition From="ListMultiSelect" GeneratedDuration="0:0:0.15" To="NoMultiSelect"/>
<VisualTransition From="NoMultiSelect" GeneratedDuration="0:0:0.15" To="ListMultiSelect"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="NoMultiSelect"/>
<VisualState x:Name="ListMultiSelect">
<Storyboard>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="X" Storyboard.TargetName="CheckboxContainerTranslateTransform"/>
<DoubleAnimation Duration="0" To="{ThemeResource ListViewItemContentTranslateX}" Storyboard.TargetProperty="X" Storyboard.TargetName="ContentBorderTranslateTransform"/>
</Storyboard>
</VisualState>
<VisualState x:Name="GridMultiSelect">
<Storyboard>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="SelectedBorder"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
der einzige Weg, ich scheine abl zu sein Um dies zu umgehen, entfernen Sie entweder diese visuellen Zustände aus dem Stil oder indem Sie den Rahmen XAML so ändern, dass der Rahmen nicht gezeichnet wird. Die Schande von , dass ist, dass ich den eingebauten Stil nicht verwenden kann; Ich muss im Grunde meinen eigenen Stil haben. Ich nehme an, dass das wahrscheinlich keine so schlechte Sache ist ... wenn Sie einmal herausgefunden haben, wie die Objektstile funktionieren, zusammen mit Settors usw.
Wo haben Sie die Pinsel definiert? – Archana
Für selectionmode = "single" SelectedEarmark und SelectedGlyph sind nicht in Frame. Ändern Sie es in Auswahlmodus mehrere, um zu sehen, ob es in Frame ist –
Danke, @ChiragShah, für diesen Vorschlag. Ich habe die Frage mit dem Ergebnis dieser Änderung aktualisiert. –