【问题标题】:Setting local int variable's value to Int.MaxValue in xaml在 xaml 中将局部 int 变量的值设置为 Int.MaxValue
【发布时间】:2010-11-29 08:34:51
【问题描述】:

我想知道如何在 xaml 中将局部 int 变量的值设置为 Int.MaxValue(在我的例子中是 ResourceDictionary)。

类似的东西:(但可行的东西:))

xmlns:s="clr-namespace:System;assembly=mscorlib

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

编辑:

@伊恩:

谢谢你:) 但是如何将静态资源用作 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>

【问题讨论】:

    标签: xaml


    【解决方案1】:

    应该这样做:

    <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

    【讨论】:

      【解决方案2】:

      问题是没有类 Int 如果您尝试使用 Int32 它可以工作

      【讨论】:

        【解决方案3】:

        你第一次如此接近,结果你错过了来自Int3232

        &lt;blablalba TooltipService.ShowDuration="{x:Static s:Int32.MaxValue}"/&gt;

        添加静态资源的另一种解决方案似乎有点荒谬 - 您实际上是在创建一个静态资源作为现有静态属性的包装器......

        【讨论】:

          【解决方案4】:

          这样。

          <Button>
             <ToolTipService.ShowDuration>
                <x:Static Member="sys:Int32.MaxValue" />
             </ToolTipService.ShowDuration>
          </Button>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-11
            相关资源
            最近更新 更多