內容 索引 搜尋
 

建立及套用值轉換器

當您在 Microsoft® Expression Blend™ 中繫結資料時,值轉換器可以讓您輕鬆將資料從某種類型轉換到另一種類型。例如,您可以要將 "123" 這個字串轉換為對應的整數值,或將 Visibility.Hidden 這個欄位轉換為布林值 false

值轉換器會在 Microsoft® .NET Framework 類別的程式碼中實作 IValueConverter 介面。ConvertConvertBack 方法都必須實作,因為資料繫結引擎在繫結來源和繫結目標之間移動值時會呼叫這些方法。如需詳細資訊,請參閱 MSDN 上的<IValueConverter 介面>(英文)。

若要套用值轉換器,您只要在將資料繫結至屬性時,填入 [建立資料繫結] 對話方塊的 [值轉換器] 欄位即可。

建立值轉換器類別

將下列程式碼貼到 DoubleValueConverter.cs 檔案中。此程式碼含有下列兩個值轉換器:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Data;

namespace Microsoft.Expression.Samples
{
/// <summary>
/// DoubleToIntegerValueConverter 提供雙精度值與整數之間的
/// 轉換。
/// </summary>
public class DoubleToIntegerValueConverter : IValueConverter
    {
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
        {
return System.Convert.ToInt32(value);
        }

public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
        {
return System.Convert.ToDouble(value); ;
        }

    }

/// <summary>
/// DoubleToIntegerValueConverter 提供雙精度值到羅馬數字字串表示法的
/// 單向轉換。
/// </summary>
public class DoubleToRomanNumeralValueConverter : IValueConverter
    {
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
        {
return this.ConvertToRomanNumeral(System.Convert.ToInt32(value));
        }

public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
        {
return null;
        }

private List<IntegerStringPair> romanStrings = null;

private string ConvertToRomanNumeral(int input)
        {
StringBuilder myBuilder = new StringBuilder();

foreach (IntegerStringPair thisPair in this.PairSet)
            {
while (input >= thisPair.Value)
                {
myBuilder.Append(thisPair.StringValue);
input -= thisPair.Value;
                }
            }

return myBuilder.ToString();
        }

private List<IntegerStringPair> PairSet
        {
get
            {
if (this.romanStrings == null)
                {
this.romanStrings = new List<IntegerStringPair>();
this.romanStrings.Add(new IntegerStringPair(1000, "M"));
this.romanStrings.Add(new IntegerStringPair(900, "CM"));
this.romanStrings.Add(new IntegerStringPair(500, "D"));
this.romanStrings.Add(new IntegerStringPair(400, "CD"));
this.romanStrings.Add(new IntegerStringPair(100, "C"));
this.romanStrings.Add(new IntegerStringPair(90, "XC"));
this.romanStrings.Add(new IntegerStringPair(50, "L"));
this.romanStrings.Add(new IntegerStringPair(40, "XL"));
this.romanStrings.Add(new IntegerStringPair(10, "X"));
this.romanStrings.Add(new IntegerStringPair(9, "IX"));
this.romanStrings.Add(new IntegerStringPair(5, "V"));
this.romanStrings.Add(new IntegerStringPair(4, "IV"));
this.romanStrings.Add(new IntegerStringPair(1, "I"));
                }

return this.romanStrings;
            }
        }
    }

/// <summary>
/// IntegerStringPair 提供簡單的方法來儲存整數字串對組。
/// </summary>
public class IntegerStringPair
    {
private int value;
private string stringValue;
public int Value
        {
get
            {
return this.value;
            }
        }
public string StringValue
        {
get
            {
return this.stringValue;
            }
        }
public IntegerStringPair(int value, string stringValue)
        {
this.value = value;
this.stringValue = stringValue;
        }
    }
}

將值轉換器套用至屬性

在下列程序中,當您將 [Slider] 物件的值繫結至兩個 [Label] 物件時會套用值轉換器,以便讓標籤顯示 [Slider] 值的整數和羅馬數字表示法。

  1. 在 Expression Blend 中,將 DoubleValueConverter.cs 檔案新增至您的專案。在 [專案] 功能表上,按一下 [新增現有項目],瀏覽至 DoubleValueConverter.cs 檔案,然後按一下 [開啟]。
    提示 此外,您可以將 DoubleValueConverter.cs 建置成 .dll 檔案,並將 .dll 的參考新增至專案中。
  2. 建置專案 (CTRL+SHIFT+B),讓專案可以使用值轉換器類別。
  3. 從 [工具箱] 中,將 [Label] 控制項和 [Slider] 控制項新增至畫板。配置這些控制項的版面,讓這些控制項擁有足夠的空間。
  4. 在選取 [物件與時間軸] 下的 [Slider] 物件後,在 [屬性] 面板的 [通用屬性] 下設定下列屬性:
    • 將 [LargeChange] 設為 10。這是當您按一下 [Slider] 時所進行的漸進式變更。
    • 將 [Maximum] 設為 2001。[Slider] 會從 0 變成 2001。
    • 將 [SmallChange] 設為 1。這是當您使用方向鍵移動 [Slider] 時所進行的漸進式變更。
  5. 在選取 [物件與時間軸] 下的第一個 [Label] 物件後,在 [屬性] 面板的 [通用屬性] 下按一下 [Content] 屬性。在出現的下拉式清單中按一下 [資料繫結]。
    [建立資料繫結] 對話方塊隨即開啟。
  6. 在 [元素屬性] 索引標籤上,從 [場景元素] 下的元素樹狀目錄中選取 [Slider]。
  7. 在 [元素屬性] 索引標籤上,選取 [屬性] 下的 [Value : (Double)]。這樣會將標籤的內容繫結至滑桿的值。
  8. 按一下 [建立資料繫結] 對話方塊上的 [展開] 按鈕 對話方塊 Expander 按鈕,以檢視進階設定。
  9. 在 [值轉換器] 下拉式方塊的旁邊,按一下 [新增值轉換器] 按鈕。
    [新增值轉換器] 對話方塊會隨即開啟。
  10. 展開專案的名稱和 [Microsoft.Expression.Samples] 命名空間,選取 [DoubleToIntegerValueConverter],然後按一下 [確定]。
    提示 如果您看不到值轉換器,請確定來源檔案已新增至專案,而且您已建置專案 (CTRL+SHIFT+B)。
  11. 在 [建立資料繫結] 對話方塊中,按一下 [完成]。
    第一個 [Label] 物件現在會顯示滑桿的整數表示法。
    附註 請注意,滑桿物件的名稱為 Slider。您必須命名應用程式中的物件,這樣才可以在應用程式的其他位置中參考這些物件,例如在進行資料繫結時參考這些物件。Expression Blend 會為您設定名稱。
  12. 針對第二個標籤重複步驟 5 到 11,但在 [新增值轉換器] 對話方塊中選取 [DoubleToRomanNumeralValueConverter]。
  13. 測試您的專案 (F5)。移動滑桿以查看在兩個標籤中更新的值。