在xaml中将local int变量的值设置为Int.MaxValue

时间:2010-11-29 08:34:51

标签: xaml

我想知道如何在xaml中将本地int变量的值设置为Int.MaxValue(在我的情况下在ResourceDictionary中)。

类似的东西:(但是有效的东西:))

的xmlns:S =“CLR-命名空间:系统;装配= mscorlib程序

<s:Int32 x:Key"HelloWorld">{x:Static s:Int.MaxValue}</s:Int32>

编辑:

@Ian:

谢谢:) 但是如何将静态资源用作int? 如果我有我的ResourceDictionary

,请说
<ResourceDictionary>
    <x:Static
        x:Key="HelloWorld"
        Member="s:Int32.MaxValue"
        />
...
    <blablalba TooltipService.ShowDuration="{StaticResource HelloWorld}"/>` <-- this does not work by the way
</ResourceDictionary>

2 个答案:

答案 0 :(得分:2)

这应该这样做:

<x:Static
    x:Key="HelloWorld"
    Member="s:Int32.MaxValue"
    />

以防不清楚这里发生了什么,它使用了很多人都不知道的方便技巧:尽管像x:Static这样的标记扩展通常用于大括号内的属性({})您也可以使用元素语法。这在您希望使用标记扩展的情况下很有用,但Xaml语法需要一个元素。 (在涉及集合的场景中,这通常是必要的,比如这个。)

使用元素语法进行标记扩展的一个小问题是,您不再需要传递构造函数参数。 (从技术上讲,构造函数参数支持是在XAML 2009中引入的,自.NET 4以来一直受到支持。但是,只有通过新的Xaml API加载Xaml才支持它.MSDN文档说new XAML 2009 features are not supported for compiled Xaml in WPF。)所以您只能将此技巧与提供默认构造函数的标记扩展一起使用,并提供可用于代替构造函数参数的属性。 StaticExtension提供了一个Member属性来完成这个技巧,所以我们在这里很好,但请注意,有时候,由于无法调用相应的构造函数,您将陷入困境。

请注意,当您输入时,Visual Studio中的Xaml IntelliSense可能会建议StaticExtension,这是此标记扩展的真实名称。当你使用属性语法时,它会离开Extension部分,但是由于某种原因,它似乎没有元素。这两种形式都是正确的 - 我会选择我在这里写的而不是IntelliSense的建议,因为我们更习惯于在属性中看到"{x:Static ...}"而不是"{x:StaticExtension ...}" - 再次,两者都是合法的但是在惯用的情况下,我们倾向于放弃Extension

答案 1 :(得分:1)

问题是没有课程Int如果你试用Int32就可以了