2014-10-30 77 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; } 
相关问题