#silverlight #expression-blend
#silverlight #выражение-blend
Вопрос:
Как указано, я хочу включить кнопку a (которая была отключена) при выборе строки из DataGrid (то есть объекта).
Из того, что я прочитал, у WPF, похоже, есть триггеры для проверки при изменении свойства centain, он может делать что-то вроде centain?
Но в Silverlight, похоже, я могу использовать только GoToState вместо этого. Я попытался создать два состояния: выбранное и невыбранное. Но свойство IsEnabled для кнопки, похоже, не записывается из невыбранного состояния в выбранное состояние…
И еще одна проблема заключается в том, что единственное событие, которое подходит из DataGrid, — это SelectionChanged, но как мне убедиться, что пользователь выбрал строку?
Если я сделаю все в code-behide, я могу проверить SelectionChangedEvent и включить кнопки, но есть ли способ сделать все, что указано выше, с помощью Expression Blend? Я пытаюсь поместить все в xaml как можно больше.
Спасибо
Ответ №1:
Вы пробовали использовать обычную привязку элементов? Например:
<DataGrid x:Name="MyGrid" />
<Button IsEnabled="{Binding Path=SelectedItem, ElementName=MyGrid, Converter={StaticResource MyNullToBoolConverter}}" />
и пример конвертера:
class MyNullToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? true : false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Все, что вам нужно сделать, это объявить конвертер в статических ресурсах страницы или кнопки.
Комментарии:
1. О, я понимаю. Значит, Expression blend не поддерживает такие вещи изначально? Я имею в виду, как без написания конвертера или кода?
2. @King, я не специалист по выражениям, я делаю весь свой XAML непосредственно в VS (поэтому я не могу сказать, обладает ли Expression такой способностью или нет). Вероятно, вы могли бы также сделать это с помощью DataTrigger или какого-либо поведения, я просто показал самый быстрый способ добиться того, чего вы хотите. Так или иначе вам придется использовать конвертер или выражение, поскольку наличие или отсутствие объекта в SelectedItem должно быть приравнено к логическому значению.