2009-11-06 99 views
1

我有一个滑块和一个标签控件。文本显示在标签(几段)中。滑块和标签/文本块控件交互 - WPF

  1. 我需要一次只显示3个单词。每1秒钟移动到下一组3个单词。
  2. 滑块用于选择一次可以看到的单词数量。因此,用户可以将它增加到10,现在每隔1秒,就需要显示一组10个单词。

我如何在WPF中实现这种行为?我知道我需要在滑块和标签之间进行某种数据绑定,但不知道如何获得(1)或(2)的效果。

任何帮助表示赞赏!

回答

0

这是我会怎么解决这个问题,而无需使用我的{EDF:ExpressionBinding}功能(该功能,唉,还不是公开可用):

第1步:在创建三个DependencyProperties(不是传统NET属性)您类:

Text 
WordsPerGroup 
GroupToShow 

步骤2:滑块绑定到 “WordsPerGroup” 属性:

<Slider ... Value="{Binding WordsPerGroups}" /> 

步骤3:创建使用LinearInt32KeyFrame到动画动画每秒计数一次,只要你喜欢持续,例如该持续1小时数为3600的“GroupToShow”属性:

<Int32AnimationUsingKeyFrames Storyboard.TargetProperty="GroupToShow" ...> 
    <LinearInt32KeyFrame KeyTime="01:00:00" Value="3600" /> 
<Int32AnimationUsingKeyFrames> 

第4步:创建一个转换器,以“文本”,“ GroupToShow”和 “WordsPerGroup”,并返回文本显示:

public SelectWordsConverter : IMultiValueConverter 
{ 
    public object ConvertTo(object [] values, ...) 
    { 
    string text = values[0] as string; 
    int groupToShow = values[1] as int; 
    int wordsPerGroup = values[2] as int; // maybe double, depending on slider binding 

    return 
     string.Join(" ", 
     text 
     .Split(" ", StringSplitOptions.RemoveEmptyEntries) 
     .Skip(groupToShow * wordsPerGroup) 
     .Take(wordsPerGroup) 
    ); 
    } 
    ... 

第5步:使用MultiBinding使用转换器将TextBlock的Text属性绑定:

<TextBlock ...> 
    <TextBlock.Text> 
    <MultiBinding Converter="{x:Static local:SelectWordsConverter.Instance}"> 
     <Binding Path="Text" /> 
     <Binding Path="GroupToShow" /> 
     <Binding Path="WordsPerGroup" /> 
    </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

第6步:确保您在加载时开始动画,或者当您希望动画开始移动时。

步骤7 :(可选)将PropertyChangedCallback添加到“GroupToShow”以检测单词何时全部显示并执行相应的操作(如重新开始或停止动画)。

+0

谢谢!我想我正在吠叫错误的树。我正在寻找实现这个使用多线程,其中当用户移动滑块,线程会做一个BeginInvoke来更新用户界面。这似乎是一个不同的方式。任何帮助,我可以在这里读到这些东西? – Nick 2009-11-06 21:32:07

+0

一本书可以参考Adam Nathan的书“Windows Presentation Foundation Unleashed”。阅读封面封面。在StackOverflow上也有很多博客和问题可以给你提供建议。使用源代码下载一些WPF应用程序和库,并查看它们如何执行操作。查看内置模板以查看它们的工作方式(将反射器与BamlViewer加载项一起使用)。那些将是我的建议。 – 2009-11-07 01:04:21

+0

嘿..忘了问..是缺少滑块相关的代码? – Nick 2009-11-10 23:05:58