2014-12-13 3 views
0

Я хотел бы скрыть TextBlock на основе страниц Visual State. Я использую VisualStateManager для изменения состояний, которые отлично работают. Но мой код для скрытия TextBlock каким-то образом не работает. Дополнительный вопрос: если два состояния имеют одни и те же инструкции (например, узкие и привязанные), существует ли способ не записывать те же теги ObjectAnimationUsingKeyFrames, поэтому количество поддерживаемого кода уменьшается? БлагодаряКак скрыть текстовый блок XAML с помощью VisualStateManager?

<TextBlock x:Name="Title" FontSize="20" FontWeight="SemiLight" Margin="12,0,0,1" 
            Text="{Binding TitleTextBlockText}" VerticalAlignment="Center"> 
          <VisualStateManager.VisualStateGroups> 
           <!-- Visual states reflect the application's window size --> 
           <VisualStateGroup> 
            <VisualState x:Name="DefaultLayout"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" 
                      Storyboard.TargetName="Title"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 Visibility.Visible 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Normal"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" 
                      Storyboard.TargetName="Title"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 Visibility.Visible 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="FullScreenLandscape"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" 
                      Storyboard.TargetName="Title"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 Visibility.Visible 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="FullScreenPortrait"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" 
                      Storyboard.TargetName="Title"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 Visibility.Visible 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Filled"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" 
                      Storyboard.TargetName="Title"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 Visibility.Visible 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 

            <VisualState x:Name="Snapped"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" 
                      Storyboard.TargetName="Title"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 Visibility.Collapsed 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Narrow"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" 
                      Storyboard.TargetName="Title"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 Visibility.Collapsed 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
         </TextBlock> 

ответ

0

Если вы хотите, чтобы это сделать (например, в шаблоне пользовательского элемента управления), вы должны обернуть textbloc в сетку. Вы не можете анимировать такой объект, потому что визуализатор не может находиться внутри объекта, который будет анимироваться самим визуализатором. В шаблоне универсального элемента управления: Пример:

<ControlTemplate TargetType="{x:Type local:NumericField}"> 
      <Grid> 
      <VisualStateManager.VisualStateGroups> 
       <VisualStateGroup Name="ValidationStates"> 
       <VisualState Name="Good"> 
        <!-- do your things --> 
       </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 

      <Border x:Name="ValidationBorderPart" 
        BorderBrush="Black" 
        BorderThickness="1"> 
       <TextBox x:Name="ValuePart" 
         Foreground="Black" 
         BorderBrush="Transparent" 
         BorderThickness="0" 
         Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:NumericField}},Path=Representation, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
      </Border> 

      </Grid> 
     </ControlTemplate>