【问题标题】:Static method call in xamlxaml 中的静态方法调用
【发布时间】:2013-04-27 20:37:23
【问题描述】:

如何在 Metro 风格应用程序的 xaml 中使用静态方法(带参数)?在 wpf 中我可以使用 ObjectDataProvider 但在 WinRT 中没有这样的东西。

我需要这样使用它:

<button x:Name="MyButton" Content=MyStaticMethodCall("Sth") />

有没有办法做到这一点?还是将对象存储在资源中,然后像这样调用他的方法?

<button x:Name="MyButton" Content={StaticResource MyObject, Path=MyObject.MyMethod("bla") />

【问题讨论】:

    标签: c# xaml styles microsoft-metro


    【解决方案1】:

    我记得在之前的项目中,metro 应用程序无法访问静态代码。我们必须引用一些常量,如果它们是 const 或 static,就无法引用它们。但是时间过去了,也许有些事情发生了变化,但我对此表示怀疑......

    【讨论】:

    • 最后不抱歉,我们只是在 xaml 页面中复制了定义......但是对于我真的不知道的功能
    【解决方案2】:

    我不确定你想要什么,但为什么不使用 MarkupExtension。

    您可以简单地添加 xaml,然后使用 ProvideValue 方法调用静态方法。

    如果您需要代码示例,请留下评论。

    【讨论】:

    • 会很好。但我不认为它会解决我的问题。我需要获取方法的结果并设置例如按钮的 Content 属性。我想我可以使用“发送者”对象,但不是每个对象都有内容——假设我想设置 Text 属性。然后我需要使用强制转换或反射来获取属性名称。另一种方法是传递应该分配方法结果的属性名称。也许它很丑,但如果没有替代品的话..
    • WinRT 不提供 MarkupExtension。
    • 真可怜。使用价值转换器怎么样?它们不需要从 MarkupExtension 派生以在 XAML 中实例化。您还可以提供附加的控件,当然还有转换器参数。尝试像 Converter={mynamespace:MyConverter Property1 = "Hello World", Property2 = {StaticResource resourceKey}}
    • 这可能是个不错的主意。我去看看。
    【解决方案3】:

    这不是它的工作原理,而不是调用方法,您应该使用 DataBinding - 将 Button 的 DataContext 或整个页面设置为您的对象,然后像这样绑定 Button 内容:

    <Button x:Name="MyButton" Content="{Binding ButtonContent}" />
    

    这里有一些关于 DataBinding 的基本信息:
    A Guided Tour of WPF – Part 3 (Data binding)

    【讨论】:

    • 不,我无法设置 DataContext。我想绑定方法,因为内容取决于一个参数。我无法创建所有内容场景并将它们作为 DataContext 的属性。
    • 由于您无法绑定到方法,您可以在绑定中使用 Converter 和 ConverterParameter 并在其中返回您想要的任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多