2 개의 시각적 상태가있는 단추 컨트롤이 있습니다. "Simple"과 "Complex"라고 말하십시오. 전자는 기본값입니다. 처음에는 컨트롤이 숨겨져 있습니다.컨트롤이 보이지 않을 때 시각 상태가 변경되지 않습니다.
내가 VisualStateManager을 통해 시각적 상태를 설정하는 경우에 ("복잡한"나는 false
를 얻을 수 있지만, 내가 볼 한 번 다음 컨트롤을 시각적 상태를 설정할 때, 그것은 true
를 반환하고 상태가 유지됩니다 후에도 컨트롤이 보이지 않게 됨) 컨트롤이 적어도 한 번 표시되면 문제가됩니다. 그렇다면 시각적 상태 변화가 존중되고 그렇지 않으면 한 번 표시 될 때까지 항상 무시됩니다.
아직 보이지 않는 컨트롤의 시각적 상태를 어떻게 설정합니까? 뒤에
<Grid x:Name="LayoutRoot"
Background="LightBlue">
<Grid.Resources>
<Style x:Key="MyButton"
TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="MyStates">
<VisualState x:Name="Simple" />
<VisualState x:Name="Complex">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ellipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)">
<DiscreteObjectKeyFrame KeyTime="10"
Value="#00000000" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse x:Name="ellipse"
Fill="#FF0E0EF5"
Stroke="Black" />
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Button x:Name="btnStuff"
Content="Click Me!"
Visibility="Collapsed"
Style="{StaticResource MyButton}" />
<StackPanel>
<Button x:Name="btnShow"
Content="Show"
Click="btnShow_Click" />
<Button x:Name="btnVisual"
Content="Visual Change"
Click="btnVisual_Click" />
</StackPanel>
</Grid>
코드 :
bool fOriginalState = true;
private void btnShow_Click(object sender, RoutedEventArgs e)
{
btnStuff.Visibility = btnStuff.Visibility == Windows.UI.Xaml.Visibility.Visible ? Windows.UI.Xaml.Visibility.Collapsed : Windows.UI.Xaml.Visibility.Visible;
}
private void btnVisual_Click(object sender, RoutedEventArgs e)
{
string visualState = fOriginalState ? "Complex" : "Simple";
fOriginalState = !fOriginalState;
bool fSet = VisualStateManager.GoToState(btnStuff, visualState, false);
System.Diagnostics.Debug.WriteLine(fSet.ToString());
}
처음에는'btnStuff'이 축소되어 페이지에 표시되지 않는다고 생각합니다. 따라서 'VisualStateManager'는 버튼을 찾을 수 없습니다. 일단 보이게하고 붕괴하면 UI 요소 트리의 일부가 될 수 있습니다. 나는이 일에 대해 확신하지 못한다. – Xyroid
보기의 ctor에 단추의 초기 상태를 설정 했습니까? – Jehof
@Jehof : 아니요, XAML에서 가시성이 축소되도록 설정되었습니다. – legends2k