2009-11-06 65 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