我是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,但无法找到一种简单的方法。感谢。
答案 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>