2015-06-10 5 views
0

Я пытаюсь реализовать переключатель стиля табуляции. Этот стиль содержит текстовый блок как дочерний элемент сетки, который меняет цвет при его проверке, а сетка является дочерним элементом пограничного элемента.свойство привязки данных другого элемента управления во время анимации

я пытаюсь связать фон сетки только тогда, когда он находится в зарегистрированном состоянии но кнопка Энд до bieng прозрачного

       </VisualState> 
          </VisualStateGroup> 

          <VisualStateGroup x:Name="CheckStates"> 
           <VisualState x:Name="Checked"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ContentPresenter" d:IsOptimized="True"/> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background)" Storyboard.TargetName="CheckedVisual"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <SolidColorBrush Color="#ff9977"/> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Unchecked"/> 
           <VisualState x:Name="Indeterminate"/> 
          </VisualStateGroup> 

          <VisualStateGroup x:Name="FocusStates"> 
           <VisualState x:Name="Focused"/> 
           <VisualState x:Name="Unfocused"/> 
           <VisualState x:Name="PointerFocused"/> 
          </VisualStateGroup> 

         </VisualStateManager.VisualStateGroups> 

         <Grid x:Name="CheckedVisual" Width="{TemplateBinding Width}" 
            Height="{TemplateBinding Height}" 
            Opacity="{TemplateBinding Opacity}" 
            HorizontalAlignment="{TemplateBinding HorizontalAlignment}" 
            VerticalAlignment="{TemplateBinding VerticalAlignment}" Background="Transparent"> 
          <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTransitions="{TemplateBinding ContentTransitions}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" d:LayoutOverrides="TopPosition, BottomPosition" Opacity="0.6" RenderTransformOrigin="0.5,0.5"> 
           <ContentPresenter.RenderTransform> 
            <CompositeTransform/> 
           </ContentPresenter.RenderTransform> 
          </ContentPresenter> 
         </Grid> 

        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

я даже пытались связывать сетки х: backgroundproperty Name = "CheckedVisual" «s в {TemplateBinding фон}

проблема находится в этой части кода

<VisualStateGroup x:Name="CheckStates"> 

           <VisualState x:Name="Checked"> 
            <Storyboard> 
             <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ContentPresenter" d:IsOptimized="True"/> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background)" Storyboard.TargetName="CheckedVisual"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <SolidColorBrush Color="{TemplateBinding Background}"/> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Unchecked"/> 
           <VisualState x:Name="Indeterminate"/> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="FocusStates"> 
           <VisualState x:Name="Focused"/> 
           <VisualState x:Name="Unfocused"/> 
           <VisualState x:Name="PointerFocused"/> 
          </VisualStateGroup> 

, когда установлен переключатель, непрозрачность будет равна 1, как ожидалось, но цвет не меняется. Я даже попробовал {Binding Background} .. но изменение на цвет statoc работает, например: «# 117755».

может кто-нибудь мне посоветует. Конечный результат, на который я нацелился, меняет обратную силу сетки, когда она проверена, заявлена ​​.. и цвет должен быть изменен на привязанное значение фона.

ответ

1

Вы не можете сделать это в соответствии с Документами: https://msdn.microsoft.com/en-us/library/ms742868.aspx?f=255&MSPPError=-2147217396

«Animate в ControlTemplate»

Вы не можете использовать динамические ссылки на ресурсы или связывание данных выражений установить раскадровку или анимацию значения свойств. Это потому, что все, что находится внутри ControlTemplate, должно быть потокобезопасным, а система времени должна зависеть от объектов Storyboard, чтобы сделать их потокобезопасными. Раскадровка не может быть заморожена, если она или ее дочерние временные рамки содержат динамические ссылки ресурсов или выражения привязки данных.Для получения более информация о замораживании и других параметрах Freezable, см. Обзор замороженных объектов.

Что вы можете сделать - это иметь отдельный прямоугольник/бордюры/что-то позади ваших элементов с фоном, привязанным к вашему желаемому цвету, и вместо этого оживить его непрозрачность. Это будет выглядеть так же, но вы не столкнетесь с этой проблемой.

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