覆盖UserControl中的DependencyProperty

时间:2014-03-12 16:28:21

标签: wpf user-controls

我有一个UserControl,HorizontalContentAlignment的默认值是HorizontalAlignment.Stretch。在构造函数中,我将其设置为HorizontalAlignment.Left

当我使用UserControl并在xaml中为其赋予属性HorizontalAlignment.Right时,则使用该值,即我无法覆盖构造函数中的值。

我可以覆盖OnApplyTemplateOnRenderLoaded事件中的属性。

我应该更喜欢这些吗?
基本上我想避免有人可以更改用户控件HorizontalContentAlignment

1 个答案:

答案 0 :(得分:1)

使用dependency property coercion callback(每次依赖属性的值即将更改时自动调用)以强制属性达到所需的值:

static YourUserControl () {
  HorizontalContentAlignmentProperty.OverrideMetadata(
    typeof(YourUserControl),
    new FrameworkPropertyMetadata(
      HorizontalAlignment.Stretch,
      null,
      CoerceHorizontalContentAlignment));
}

private static object CoerceHorizontalContentAlignment(DependencyObject d, object baseValue) {
  return HorizontalAlignment.Stretch;
}