我有一个滑块和一个标签控件。文本显示在标签中(几段)。
如何在WPF中实现此行为?我知道我需要在滑块和标签之间进行某种数据绑定,但不知道如何获得(1)或(2)的效果。
感谢任何帮助!
答案 0 :(得分:0)
以下是我在不使用{edf:ExpressionBinding}功能的情况下解决问题的方法(唉,目前尚未公开发布):
步骤1:在您的班级中创建三个DependencyProperties(不是传统的NET属性):
Text
WordsPerGroup
GroupToShow
步骤2:将Slider绑定到“WordsPerGroup”属性:
<Slider ... Value="{Binding WordsPerGroups}" />
步骤3:使用LinearInt32KeyFrame创建动画,为“GroupToShow”属性设置动画,该属性每秒计数一次并持续任意长度,例如持续1小时并计入3600:
<Int32AnimationUsingKeyFrames Storyboard.TargetProperty="GroupToShow" ...>
<LinearInt32KeyFrame KeyTime="01:00:00" Value="3600" />
<Int32AnimationUsingKeyFrames>
步骤4:创建一个转换器,它接受“Text”,“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”以检测单词何时全部显示并执行适当的操作(如重新开始或停止动画)。