Wpf 为什么OverrideMetadata没有响应?
简单的问题。我将Wpf 为什么OverrideMetadata没有响应?,wpf,metadata,dependency-properties,Wpf,Metadata,Dependency Properties,简单的问题。我将StackPanel子类化,如下所示。我正在尝试将Grid.IsSharedSizeScopeProperty的默认值更改为true,因为默认行为应该设置该值 如您所见,我尝试在静态初始值设定项中重写该属性,但它没有反映在UI中。但是,如果我改为在实例构造函数中显式设置它,它就可以工作了 我的问题是,为什么覆盖默认值不会影响布局,但它的显式设置会影响布局 这是我的XAML 正在尝试更改属性的默认值。这不管用 public class LabeledStackPanel : S
StackPanel
子类化,如下所示。我正在尝试将Grid.IsSharedSizeScopeProperty的默认值更改为true
,因为默认行为应该设置该值
如您所见,我尝试在静态初始值设定项中重写该属性,但它没有反映在UI中。但是,如果我改为在实例构造函数中显式设置它,它就可以工作了
我的问题是,为什么覆盖默认值不会影响布局,但它的显式设置会影响布局
这是我的XAML
正在尝试更改属性的默认值。这不管用
public class LabeledStackPanel : StackPanel {
static LabeledStackPanel(){
Grid.IsSharedSizeScopeProperty.OverrideMetadata(
typeof(LabeledStackPanel),
new FrameworkPropertyMetadata(true));
}
}
但是这样做(因此我知道属性本身会正确地影响布局):
具有讽刺意味的是,两者都不起作用!这件事真让我难堪!这就好像试图设置默认值以某种方式完全破坏了行为
public class LabeledStackPanel : StackPanel {
static LabeledStackPanel(){
Grid.IsSharedSizeScopeProperty.OverrideMetadata(
typeof(LabeledStackPanel),
new FrameworkPropertyMetadata(true));
}
public LabeledStackPanel(){
Grid.SetIsSharedSizeScope(this, true);
}
}
那么我在这里错过了什么
我猜这可能与以下评论有关(尽管这不是一个模板):
如果资源模板内的IsSharedSizeScope设置为true,并且在该模板外定义了SharedSizeGroup,则网格大小共享不起作用
作为记录,我还尝试使用AddOwner
以这种方式重新定义属性,但事情是一样的。不起作用。Grid.GetIsSharedSizeScope(此)
在LabeledItemGrid构造函数中为我返回true
和OverrideMetadata。但子网格似乎不尊重它。您可以尝试添加子网格以查看它们是否如您所期望的那样响应吗?我可能会期望什么?也许可以编辑您的问题以添加有关用例的详细信息。使用示例XAML更新问题以显示我所指的内容。同样,如果我在构造函数中显式调用Grid.SetIsSharedSizeScope(this,true)
,它会按预期工作,但重写元数据似乎不会影响控件。Grid.GetIsSharedSizeScope(this)
在LabeledItemGrid中,构造函数使用OverrideMetadata为我返回true
。但是子网格似乎不尊重它。您可以尝试添加子网格以查看它们是否如您所期望的那样响应吗?我可能会期望什么?也许可以编辑您的问题以添加有关用例的详细信息。使用示例XAML更新问题以显示我所指的内容。同样,如果我在构造函数中显式调用Grid.SetIsSharedSizeScope(this,true)
,它会按预期工作,但重写元数据似乎不会影响控件。
public class LabeledStackPanel : StackPanel {
static LabeledStackPanel(){
Grid.IsSharedSizeScopeProperty.OverrideMetadata(
typeof(LabeledStackPanel),
new FrameworkPropertyMetadata(true));
}
public LabeledStackPanel(){
Grid.SetIsSharedSizeScope(this, true);
}
}