1

У меня есть этот XAML код:VisualStateManager.GoToState возвращает ложь и визуальное состояние не изменяется

 <Button x:Name="btnStartRecord" Visibility="Collapsed"> 
      <Button.BorderBrush> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="Black" Offset="0"/> 
        <GradientStop Color="#FFF3883E" Offset="1"/> 
       </LinearGradientBrush> 
      </Button.BorderBrush> 
     </Button> 
     <Button x:Name="btnStopRecord" Visibility="Collapsed"> 
      <Button.BorderBrush> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="Black" Offset="0"/> 
        <GradientStop Color="#FFF3883E" Offset="1"/> 
       </LinearGradientBrush> 
      </Button.BorderBrush> 
     </Button> 

<VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="MainStates"> 
       <VisualState x:Name="RecordIconState"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnStartRecord" Storyboard.TargetProperty="(UIElement.Visibility)"> 
          <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/> 
          <!--<DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>--> 
         </ObjectAnimationUsingKeyFrames> 
         <!--<ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnStopRecord" Storyboard.TargetProperty="Visibility"> 
          <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> 
         </ObjectAnimationUsingKeyFrames>--> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="StopRecordIconState"> 
        <Storyboard> 
         <!--<ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnStartRecord" Storyboard.TargetProperty="Visibility"> 
          <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> 
         </ObjectAnimationUsingKeyFrames>--> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnStopRecord" Storyboard.TargetProperty="Visibility"> 
          <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       </VisualStateGroup>     
     </VisualStateManager.VisualStateGroups> 

И в код, я называю такую ​​функцию в OnLoad/Constructor:

private void SwitchRecordButtonContent() 
    { 
     { 
      if (m_bRecording) 
      { 
       //btnStartStopRecord.Content = "StopRecord"; 
       VisualStateManager.GoToState(this, StopRecordIconState.Name, false); 
       VisualState currentState = MainStates.CurrentState; 
       Visibility temp = btnStartRecord.Visibility; 
      } 
      else 
      { 
       //btnStartStopRecord.Content = "StartRecord"; 
       bool op = VisualStateManager.GoToState((Button)this.btnStartRecord, RecordIconState.Name, false); // I get this always false 
       VisualState currentState = MainStates.CurrentState; 
       Visibility temp = btnStartRecord.Visibility; 
      } 
     } 
    } 

Но я см. визуальное изменение состояния, и я не могу понять, почему :(

Есть ли что-нибудь, что я делаю неправильно?

+2

Является ли VSM прикрепленным к корневому элементу? – atomaras

+0

да это, к сетке вокруг выше кода xaml. –

+0

@atomaras Большое спасибо. Несмотря на то, что VAM был прикреплен к корню моего контекста, вокруг него была добавлена ​​дополнительная Grid. Я попытался подключить его к этому, и он сработал! Большой!! Спасибо большое :) –

ответ

1

как atomaras, упомянутым в указанном выше комментариев, переместил код к самому корню UserControl и она работала :)

1

Вы звоните

VisualStateManager.GoToState((Button)this.btnStartRecord, RecordIconState.Name, false); // I get this always false 

но основанный на короткий взгляд, вы должны быть вызывающими

VisualStateManager.GoToState(this, RecordIconState.Name, false); 
+1

Кстати, мне нравится идея получить имя именованного состояния, которое будет использоваться при переходе на это состояние. С чего взял? Мне тоже нужно начать делать это. –

+0

Hi Filip, Я пробовал оба пути. Если вы видите, в части IF я попытался отправить «это» , но это не сработало. Поэтому я попробовал кнопку, которая тоже не работала. Именование в этом стиле я использовал для своего удобства. Код слишком велик, поэтому для упрощения получения того, что он делает именно после нескольких дней написания, я использовал его. Приятно, что вам понравилось. Многим это не нравится :) Кстати, если вы найдете какой-либо другой способ решения проблемы, пожалуйста, дайте мне знать. Благодаря :) –

Смежные вопросы