2015-06-10 10 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> 

我已經甚至試圖網格X綁定:名稱= 「CheckedVisual」 的backgroundproperty到{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,但顏色不變。我甚至嘗試過{綁定背景} ..但更改爲statoc顏色適用於例如:「#117755」。

任何人都可以請指導我..我的目標是最終結果是改變網格的背景時,它是檢查陳述..和顏色應改變爲綁定的背景值。

回答

1

根據文檔你不能做到這一點:https://msdn.microsoft.com/en-us/library/ms742868.aspx?f=255&MSPPError=-2147217396

「動畫中的ControlTemplate」

不能使用綁定表達式 動態資源引用或數據來設定故事板或動畫屬性值。這是因爲 ControlTemplate中的所有內容都必須是線程安全的,並且定時系統必須凍結Storyboard對象才能使它們保持線程安全。 如果Storyboard或其子時間軸包含 動態資源引用或數據綁定表達式,則Storyboard不能被凍結。有關凍結和其他Freezable功能的更多信息,請參閱 Freezable對象概述。

你可以做的是在你的元素後面有一個單獨的Rectangle/Border/Some,它的背景綁定到你想要的顏色上,然後動畫化它的不透明度。它看起來一樣,但你不會遇到這個問題。

相關問題