Спасибо за предоставление XAML. Вот как бы я решил эту проблему.
Прежде всего, создайте VisualStates
индивидуально для каждого Path
. (Я бы порекомендовал использовать Style
вместо этого, чтобы сохранить перекодирование очень похожих VisualState
в каждый путь, но я недостаточно знаком с ними, чтобы знать, можно ли применять разные цвета к каждому.)
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="Path1States">
<VisualState x:Name="Activate">
<Storyboard>
<ColorAnimation Storyboard.TargetName="Path1"
Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)"
To="Blue"
Duration="0:0:0.5" />
</Storyboard>
</VisualState>
<VisualState x:Name="Deactivate">
<Storyboard>
<ColorAnimation Storyboard.TargetName="Path1"
Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)"
To="#00000000"
Duration="0:0:0.5" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="Path2States">
<!-- ... etc ... -->
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Теперь создайте List
в выделенном фрагменте кода, который содержит каждый из связанных объектов, а затем направьте свою собственную функцию GoToState
так, чтобы она включала входное состояние для одного объекта и вызывала отключенное состояние для остальное.
List<Path> pathList;
public Page() // constructor
{
InitializeComponent();
pathList = new List<Path>();
pathList.Add(Path1);
// and so forth
}
// Call this function when you want to change the state
private void ActivatePath(Path p)
{
foreach (Path listItem in pathList)
{
// If the item from the list is the one you want to activate...
if (listItem == p)
VisualStateManager.GoToState(listItem, "Activate", true);
// otherwise...
else
VisualStateManager.GoToState(listItem, "Deactivate", true);
}
}
Если бы я лучше разбирался в XAML и стилях, у меня мог бы быть более чистый способ создания VisualStates. Тем не менее, моя сильная сторона больше относится к логике и кодированию. Тем не менее, гораздо чище, чем писать один и тот же VisualState
четыре или пять раз! :)
Надеюсь, это поможет!