[英]Change VisualState of ListBox element
我有一個Lisbox,其中有一個ItemsTemplate,在這個itemTemplate中,我有一個想要更改visualState的元素,問題是我不知道如何更改狀態。 這是我到目前為止所得到的。
<ListBox Name="My_LB" ItemsSource="{Binding Users}" Canvas.Left="45.8256" Canvas.Top="39.3065" Canvas.ZIndex="2" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Ellipse x:Name="user_ellipse" Width="7.87566" Height="7.87563" Canvas.Left="25.3505" Canvas.Top="5.08428e-005" Stretch="Fill" StrokeThickness="1.6" StrokeLineJoin="Round" Stroke="#FF000000">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="IsTurn">
<VisualState x:Name="PlayersTurn">
<Storyboard>
<ColorAnimation To="Yellow" Storyboard.TargetName="user_ellipse" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)"/>
<ColorAnimation To="Yellow" Storyboard.TargetName="user_ellipse" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)"/>
<ColorAnimation To="Yellow" Storyboard.TargetName="user_ellipse" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[2].(GradientStop.Color)"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse.Fill>
<RadialGradientBrush RadiusX="0.651141" RadiusY="0.651175" Center="0.380114,0.308228" GradientOrigin="0.380114,0.308228">
<RadialGradientBrush.RelativeTransform>
<TransformGroup>
<RotateTransform CenterX="0.380114" CenterY="0.308228" Angle="47.4886"/>
</TransformGroup>
</RadialGradientBrush.RelativeTransform>
<GradientStop Color="#FF9F9065" Offset="0"/>
<GradientStop Color="#FF4F4832" Offset="0.685767"/>
<GradientStop Color="#FF000000" Offset="1"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Canvas>
</Viewbox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
這就是我到目前為止所取得的成就,如果有人能以任何方式幫助我改變狀態,那將不勝感激。
此外,如果可能的話,我想根據ViewModel中的參數更改狀態,我使用的是MVVM設計,我找到了這種解決方法 ,但是我不知道“ b”的命名空間,因此d不知道如何獲取“ VisualStateSettingBehavior”。
更新我已將Ellipse更改為按鈕,並在資源字典中為該按鈕制作了樣式,所以現在的內容是:
主頁:
<ListBox Name="My_LB" ItemsSource="{Binding Users}" Canvas.Left="45.8256" Canvas.Top="39.3065" Canvas.ZIndex="2" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Button Name="Shield_Light" Canvas.Left="25.3505" Canvas.Top="5.08428e-005" Style="{StaticResource Style1}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在我的ResourceDictionary中,我有一個句號:
<Style x:Key="Style" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Ellipse x:Name="Ellipse_Light" Width="7.87566" Height="7.87563" Stretch="Fill" StrokeThickness="1.6" StrokeLineJoin="Round" Stroke="#FF000000" Fill="Red">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommomStates">
<VisualState x:Name="IsNotTurn"/>
<VisualState x:Name="IsTurn">
<Storyboard>
<ColorAnimation Storyboard.TargetName="Ellipse_Light" Storyboard.TargetProperty="Fill" To="Yellow"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Ellipse>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但是我仍然不知道如何更改VisualState,使其變為黃色。
首先,將橢圓形改為按鈕是一個好主意,就像在更新版本中所做的那樣。 但是,對於情節提要的targetProperty設置不正確,應將其設置為:
Storyboard.Targetproperty ="(Fill).(SolidColorBrush.Color)"
如果您希望從后面的代碼中更改VisualState,則應找到Button,然后更改其狀態。 我發現以下兩個示例對我有幫助:
也就是說,您可以通過visualTreeHelper和obj.FindName找到該按鈕。
但是,如果要從ViewModel更改VisualState,則應設置Attached屬性 ,這兩個站點將幫助您:
您可以使用下面提到的代碼
VisualStateManager.GoToState(this, "PlayersTurn", false);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.