我有一個滑塊和一個標籤控件。文本顯示在標籤(幾段)中。滑塊和標籤/文本塊控件交互 - 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