1
我正在爲windows phone使用silverlight,我想將按鈕的IsEnabled屬性綁定到文本塊是否包含文本。換句話說,我希望我的按鈕在文本塊的文本不爲空時啓用,否則禁用。將IsEnabled屬性綁定到文本塊是否有數據
是否有可能純粹在XAML中使用樣式/設置/觸發器或任何其他機制來做到這一點,還是必須編寫一個轉換器?
PS:我還在學習的Silverlight,.NET等。
我正在爲windows phone使用silverlight,我想將按鈕的IsEnabled屬性綁定到文本塊是否包含文本。換句話說,我希望我的按鈕在文本塊的文本不爲空時啓用,否則禁用。將IsEnabled屬性綁定到文本塊是否有數據
是否有可能純粹在XAML中使用樣式/設置/觸發器或任何其他機制來做到這一點,還是必須編寫一個轉換器?
PS:我還在學習的Silverlight,.NET等。
由於類型不兼容(你通常會希望避免代碼隱藏/依賴屬性)一個「字符串啓用轉換器」對於這種簡單的檢查來說,你是最好的選擇。
由於轉換器各地的項目共享,並且僅在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>