【问题标题】:Getting a particular setter of a style object获取样式对象的特定设置器
【发布时间】:2023-04-05 00:31:01
【问题描述】:

我想知道如何在 silverlight 的代码隐藏中从样式对象中检索特定的设置器

我有一个样式 S,它被正确加载并应用于某个对象。然后在运行时我想改变这种风格的一个特定设置器说它的背景设置器(当然我想要的是改变一个特定设置器的值)。

为此,我查看了 SetterBaseCollection 类型的 Setter collection,并包含所有这种风格的 setter。到目前为止,一切都很好。这个集合似乎包括了所有在 XAML 中定义的 setter,但是我该如何访问它们呢?

当我遍历这个集合时,我正在处理“Setter”类型的对象。但我不知道如何选择包含“背景”属性的那个。

// this works totally fine; the variable myStyle is getting the correct Style
myStyle = this.Resources["myStyle"] as Style;

// the myStyle.Setters collection seems to contain all setters of the style
foreach (Setter s in myStyle.Setters) {

   // so now what to do to get the setter that sets the Background property of my style ??

  // my naive approach did not work:
  if (s.Property.ToString().equals("Background")) {

      // do something
  }
}

(Setter 对象确实有一个 Name 属性,这实际上正是我想要完成与字符串“Background”的比较 - 并且调试提供该属性真正包含字符串“Background”。...但是这是一个非公共属性!

如果有人有任何建议,那将是很棒 :)

附言我的当地时间是凌晨 03:00,所以我有点累和过度劳累 - 所以请让我再次澄清我的问题,以防你猜不出我需要什么;)

【问题讨论】:

标签: wpf silverlight styles code-behind setter


【解决方案1】:

样式中的设置器无论如何都会被密封(一旦样式被使用,可能与包含的集合一起),因此您无法修改它,样式应该是持久的。我建议您将整个样式换成新样式或尝试以不同的方式处理。

【讨论】:

  • 二传手被封印了? - 多么无用的想法;)不,我只是在开玩笑 :) 非常感谢你的回答 - 我真的不知道这个事实......一旦初始化,我将不得不采取不同的方法而不改变风格.
【解决方案2】:
var prop = ((Setter)setter).Property;
if (prop.Name.Equals("Background")
{
   //do smth
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2018-02-26
    • 2011-11-06
    • 2012-01-06
    相关资源
    最近更新 更多