Я определил свойство зависимости следующим образом:
public static readonly DependencyProperty AnimateColumnWidthProperty =
DependencyProperty.Register("AnimateColumnWidthProperty", typeof(double), typeof(MainWindow), new PropertyMetadata(0.0));
public double AnimateColumnWidth
{
get { return (double)GetValue(AnimateColumnWidthProperty); }
set { SetValue(AnimateColumnWidthProperty, value); }
}
Когда мое приложение запускается, я делаю это ...
private void Window_Loaded(object sender, RoutedEventArgs e)
{
AnimateColumnWidth = Properties.Settings.Default.ProductInfoWidthExpanded;
}
... который должен инициализировать значение до его начального значения - в данном случае 400.
Затем я привязал столбец сетки в моем интерфейсе к этому свойству ...
<ColumnDefinition
Name="ProductInfo"
Width="{Binding Path=AnimateColumnWidth,
Converter={StaticResource doubleToGridLength},
Mode=TwoWay}" />
Насколько я понимаю, поскольку ширина столбца связана с этим свойством, всякий раз, когда я обновляю свойство, ширина столбца также должна обновляться.
Что я делаю неправильно, так как ширина не обновляется при изменении свойства? Я также пытаюсь обновить его с помощью анимации, которая также не работает. Кроме того, точка останова, установленная в получателе свойства AnimateColumnWidth, никогда не достигается, что означает, что ничто никогда не пыталось получить свойство.
(Это работало так ясно, что я где-то сломал !!)
Сноска:
Преобразованное значение определяется в корневом пространстве имен моего приложения (я думаю, что WPF будет жаловаться, если не сможет его найти).
[ValueConversion(typeof(Double), typeof(GridLength))]
public class DoubleToGridLength : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new GridLength((double)value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((GridLength)value).Value;
}
}