我很想了解WPF的一个特殊部分。我正在为Control中的ColumnDefinition设置GridLength(宽度)值。该值引用静态类的静态属性。当然它不支持INotifyPropertyChanged但我想要的只是更新值,当创建此Control的下一个实例时,它应该采用新值。但它不会这样。
绑定到依赖项属性时,我遇到了相同的行为,该属性通过静态属性获取其默认值。这永远不会再次评估,这对我来说是合乎逻辑的。但是在创建下一个实例时,只使用一个字段就可以了。
我写这篇文章时我才意识到一件事。我说的是自定义控件,值在模板中使用。所以我假设ElementFactory是使用该值创建的,然后只使用其内部值推出少量控件。有人可以证实吗?
如果它是如何工作的,那么解决方法或更好的方法是什么:处理这个问题的正确方法是什么?我正在将一个新值应用于OnApplyTemplate中的控件资源。
感谢您对此的看法。最好的问候!
编辑:代码很简单:
// static values
public static class DesignDefaultValues
{
static DesignDefaultValues()
{
LabelColGridLength = new GridLength(22d);
}
public static GridLength LabelColGridLength { get; private set; }
}
// XAML USAGE
<Style TargetType="{x:Type local:SomeClass}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:SomeClass}">
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{x:Static local:DesignDefaultValue.LabelColGridLength }" />
<ColumnDefinition Width="*" /> ...