2014-10-30 31 views
0

我正在嘗試編寫一個廣告控件以實現所有應用程序的頁面。 這個用戶控件只包含一個「layoutRoot」網格和一個「AdMob」網格,起初我想隱藏並且只在「time_show_banner」時間之後顯示。我嘗試綁定這個變量,但它只在標題處返回錯誤。KeyFrame對象的KeyTime屬性必須設置爲非負的TimeSpan值

在C#代碼

public string time_show_banner { get; set; } 

我的用戶控件:

<Grid x:Name="LayoutRoot" Background="Black" Height="60"> 
    <Grid x:Name="AdMob" RenderTransformOrigin="0.5,0.5">    
     <Grid.RenderTransform> 
      <CompositeTransform TranslateY="70"/> 
     </Grid.RenderTransform> 
    </Grid> 
    <Grid.Triggers> 
     <EventTrigger RoutedEvent="Grid.Loaded"> 
      <BeginStoryboard> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="AdMob"> 
         <DiscreteObjectKeyFrame Value="0" 
      KeyTime="{Binding time_show_banner ,Converter={StaticResource ConvertKeyTime}}"/> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Grid.Triggers> 
</Grid> 

的轉換:

public class ConvertKeyTime : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string d = value.ToString(); 
     string a = "0:0:" + d; 
     return a; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

請添加您從轉換器返回的值 – ShayD 2014-10-30 08:28:32

回答

2

你的轉換器應該返回一個TimeSpan,而不是一個字符串:

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var seconds = (double)value; 
    return TimeSpan.FromSeconds(seconds); 
} 

Convert方法假設屬性是double類型的,並返回以秒計的時間:

public double time_show_banner { get; set; } // seconds 

這就是說,較好的解決方案可能是直接聲明屬性作爲TimeSpan。您根本不需要轉換器:

public TimeSpan time_show_banner { get; set; } 
相關問題