如何在XAML中定义和使用简单资源?

时间:2012-03-30 09:05:11

标签: wpf xaml

我是WPF的新手。我有以下XAML代码:

</Window>
        ...
    <Canvas>
        <TextBlock Canvas.Left="300" Canvas.Top="300">WORD1</TextBlock>
        <TextBlock Canvas.Left="350" Canvas.Top="300">WORD2</TextBlock>
        <TextBlock Canvas.Left="400" Canvas.Top="300">WORD3</TextBlock>
    </Canvas>
</Window>

我想将“300”定义为资源(​​比如说“myTop”)并用Canvas.Top =“myTop”替换所有Canvas.Top =“300”。

如何在WPF / XAML中执行此操作?我查看了StaticResources和DataTemplates,但无法找到一种简单的方法。感谢。

3 个答案:

答案 0 :(得分:3)

首先,您必须将xmlns添加到窗口

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

然后像这样定义资源

<Window.Resources>
    <System:Double x:Key="theTop">300</System:Double>
</Window.Resources>

然后你可以使用它:

<Canvas>
  <TextBlock Canvas.Left="300" Canvas.Top="{StaticResource theTop}">WORD1</TextBlock>
</Canvas>

答案 1 :(得分:2)

这个比你想象的要复杂一些,因为你基本上想要定义一个System.Double类型的“常量”,以便稍后引用。

要获得该类型,您需要在XAML中使用mscorlib.dll中的System命名空间,因此在其他命名空间声明下将此行添加到文件的顶部:

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

现在我们可以使用该XML命名空间来定义我们的资源:

<Canvas>
    <Canvas.Resources>
        <s:Double x:Key="foo">300</s:Double>
    </Canvas.Resources>

...并从TextBlocks中引用它:

    <TextBlock Canvas.Left="300" Canvas.Top="{StaticResource foo}">WORD1</TextBlock>
    <TextBlock Canvas.Left="350" Canvas.Top="{StaticResource foo}">WORD2</TextBlock>
    <TextBlock Canvas.Left="400" Canvas.Top="{StaticResource foo}">WORD3</TextBlock>
</Canvas>

答案 2 :(得分:1)

在Windows Phone 8.1中,类型必须是XAML语言的基本类型,可以像这样访问:

...
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
...

<Page.Resources>
    <x:Double x:Key="theTop">300</System:Double>
</Page.Resources>

见这里:https://msdn.microsoft.com/en-us/library/hh771178.aspx