Один из способов создать скин для этого кота - преобразовать строку (в списке) в логическое значение для передачи в IsEnabledProperty ...
Сначала создайте класс, который реализует интерфейс IValueConverter, например:
public class StringToBoolConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return false;
string keyword = value.ToString();
if (keyword.Equals(parameter.ToString(), StringComparison.CurrentCultureIgnoreCase))
return true;
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Обратите внимание, как вам не нужно реализовывать метод ConvertBack? Это потому, что вам нужно только превратить строки в bools, а не наоборот ...
Таким образом, вы можете объявить экземпляр вашего конвертера в xaml, например
<Window
...
xmlns:local="clr-namespace:WpfApplication1">
<Window.Resources>
<local:StringToBoolConverter x:Key="stringToBoolConverter" />
</Window.Resources>
И, наконец, вы можете привязать TextBox к SelectedValue ListBox, например:
<TextBox Grid.Row="0" Width="90" Height="30"
IsEnabled="{Binding ElementName=lbSource, Path=SelectedValue, Converter={StaticResource stringToBoolConverter}, ConverterParameter=ValueForEnabled}">
</TextBox>
Примечание: это будет работать, только если ListBox содержит строки, и вы можете быть уверены, что свойство SelectedValue является строкой ...