覆盖UserControl中的DependencyProperty

问题描述 投票:3回答:1

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

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

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

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

wpf user-controls
1个回答
4
投票

使用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;
}   
© www.soinside.com 2019 - 2024. All rights reserved.