我有一个滑块和一个标签控件。文本显示在标签(几段)中。滑块和标签/文本块控件交互 - WPF
- 我需要一次只显示3个单词。每1秒钟移动到下一组3个单词。
- 滑块用于选择一次可以看到的单词数量。因此,用户可以将它增加到10,现在每隔1秒,就需要显示一组10个单词。
我如何在WPF中实现这种行为?我知道我需要在滑块和标签之间进行某种数据绑定,但不知道如何获得(1)或(2)的效果。
任何帮助表示赞赏!
我有一个滑块和一个标签控件。文本显示在标签(几段)中。滑块和标签/文本块控件交互 - WPF
我如何在WPF中实现这种行为?我知道我需要在滑块和标签之间进行某种数据绑定,但不知道如何获得(1)或(2)的效果。
任何帮助表示赞赏!
这是我会怎么解决这个问题,而无需使用我的{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”以检测单词何时全部显示并执行相应的操作(如重新开始或停止动画)。
谢谢!我想我正在吠叫错误的树。我正在寻找实现这个使用多线程,其中当用户移动滑块,线程会做一个BeginInvoke来更新用户界面。这似乎是一个不同的方式。任何帮助,我可以在这里读到这些东西? – Nick 2009-11-06 21:32:07
一本书可以参考Adam Nathan的书“Windows Presentation Foundation Unleashed”。阅读封面封面。在StackOverflow上也有很多博客和问题可以给你提供建议。使用源代码下载一些WPF应用程序和库,并查看它们如何执行操作。查看内置模板以查看它们的工作方式(将反射器与BamlViewer加载项一起使用)。那些将是我的建议。 – 2009-11-07 01:04:21
嘿..忘了问..是缺少滑块相关的代码? – Nick 2009-11-10 23:05:58