【问题标题】:Finding the cause of Style problems寻找风格问题的原因
【发布时间】:2012-03-22 09:05:39
【问题描述】:

在大型 WPF 项目中,按钮上的填充设置没有任何效果。按钮上没有设置样式、模板等,但它仍然不会使用我的填充。

<StackPanel>
    <Button Padding="20, 20">Hello</Button>
</StackPanel>

我在一个全新的项目中尝试过这个,它就像一个魅力。显然,项目中某处有一些全局样式、模板导致了这种情况。在 xaml 文件中的某个位置,或者在某个资源文件中。由于这个项目相当庞大,我经历一切是不可行的。

如何调试这个?我可以看到覆盖填充的内容吗?

我尝试用Snoop 2.7.0 窥探,但它并没有真正告诉我太多。有关如何处理此类错误的任何提示?

编辑

我查看了ValueSource 的一些属性:

  • 填充=本地
  • ContentTemplate=默认
  • 模板=样式

【问题讨论】:

    标签: c# wpf debugging xaml styles


    【解决方案1】:

    【讨论】:

    【解决方案2】:

    在 MSDN 中有一个关于Dependency Property Value Precedence 的页面。

    为什么重要?很少有人真正知道依赖属性值的优先顺序。

    例如,您是否知道您在 DP 的 CoerceValueCallback 中设置的任何值都会覆盖任何其他设置?

    我建议您查看该链接并从顶部(最强的集合,将覆盖任何内容)开始到底部(最弱的集合,将被任何内容覆盖),那里有一个级别,您的值被设置了。

    但是,嘿,如果您查看该列表,您会发现您已经处于第 3 位! 本地价值。所以你只有两个级别:动画和价值强制;)

    【讨论】:

      【解决方案3】:

      我发现您自己的答案也可能不正确。

      您在 Button 对象中添加的任何内容都会覆盖样式中定义的内容。

      我猜你在按钮内定义的填充没有做任何事情的原因是,在你的默认样式中,ContentPresenter 缺少这个,

      <ContentPresenter Margin="{TemplateBinding Padding}"
      

      padding是文本到按钮边框的距离,也就是这个ContentPresenter的边距。

      【讨论】:

      • 不错的收获!这实际上是 ContentPresenter 中缺少的,但是将 Margin 放在那里没有帮助,实际的文本块移动了,但按钮的大小没有受到影响......
      • 按钮的大小不会根据其内容的填充而改变,如果按钮不小并且您为其分配了较大的填充,则文本将根本不会显示。
      • 是的,没错。但是如果我使用默认样式,按钮的大小也会改变。
      • 那是因为您将按钮的宽度和高度设置为自动对吗?您可以发布您的按钮样式的 xaml 代码吗?
      • 不,不会打扰发布它。里面的东西挺多的。宽度不是我能说的,但高度是在样式中设置的。但是填充都不会改变......
      【解决方案4】:

      这对我有用:

      <Button>
          <Button.Content>
              <TextBlock Padding="20" Text="Hello world!" />
          </Button.Content>
      </Button>
      

      【讨论】:

      • 如果您阅读了这个问题,它在新项目中也适用于我。
      【解决方案5】:

      此特定问题是由App.xaml 中包含的资源中定义的样式引起的。

      这里的重要教训是,没有x:Key 属性的样式将影响目标类型的所有元素,如here 所述。

      &lt;Style*TargetType="*Button 上执行解决方案范围的通配符搜索产生了可能影响我的按钮的潜在样式列表。我发现一个没有 x:Key 属性的,将其注释掉只是为了尝试!填充有效。

      【讨论】:

        猜你喜欢
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2020-02-25
        相关资源
        最近更新 更多