2010-08-21 73 views
1

我正在爲windows phone使用silverlight,我想將按鈕的IsEnabled屬性綁定到文本塊是否包含文本。換句話說,我希望我的按鈕在文本塊的文本不爲空時啓用,否則禁用。將IsEnabled屬性綁定到文本塊是否有數據

是否有可能純粹在XAML中使用樣式/設置/觸發器或任何其他機制來做到這一點,還是必須編寫一個轉換器?

PS:我還在學習的Silverlight,.NET等。

回答

6

由於類型不兼容(你通常會希望避免代碼隱藏/依賴屬性)一個「字符串啓用轉換器」對於這種簡單的檢查來說,你是最好的選擇。

由於轉換器各地的項目共享,並且僅在XAML(和代碼隱藏完全沒有變化)一個次入口,你不應該擔心使用轉換器... 轉換器是你的朋友 :)

開始製作一個有用的轉換器庫,因爲同樣的問題一次又一次地出現。

這裏是一個轉換器的一些最少的代碼(沒有錯誤檢查),做你想要的東西:

using System; 
using System.Windows.Data; 

namespace LengthToEnabledTest 
{ 
    public class LengthToEnabledConverter : IValueConverter 
    { 

     #region IValueConverter Members 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value is string) 
      { 
       return (value as string).Length > 0; 
      } 
      throw new NotImplementedException(); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 
} 

和一些相應的檢查XAML(一個簡單的堆疊面板1個文本框和1個按鈕):

<UserControl x:Class="TransitioningContentContolTest.LengthEnabledTest" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:converter="clr-namespace:LengthToEnabledTest" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 
    <UserControl.Resources> 
     <converter:LengthToEnabledConverter x:Key="LengthToEnabledConverter"/> 
    </UserControl.Resources> 
    <StackPanel x:Name="LayoutRoot" Background="White"> 
     <TextBox x:Name="textBox" /> 
     <Button Content="Press me" Height="20" IsEnabled="{Binding Text, ElementName=textBox, Converter={StaticResource LengthToEnabledConverter}}"/> 
    </StackPanel> 
</UserControl> 
相關問題