【发布时间】:2012-07-05 01:02:48
【问题描述】:
在 WPF 中是否有类似 HTML div 的容器(这很容易),我可以在其中定位该容器中的所有文本块?所以我不必在每个文本块上指定样式?
我有一个复杂的画布,我只想在一个区域中定位文本块。
有这种效果的东西(StackPanel 以外的东西可以作为样式定位容器):
<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="White"></Setter>
<Setter Property="FontFamily" Value="Arial"></Setter>
</Style>
</StackPanel.Resources>
<TextBlock Canvas.Left="87" Canvas.Top="210">
mytext1
</TextBlock>
<TextBlock Canvas.Left="87" Canvas.Top="232">
mytext2
</TextBlock>
<TextBlock Canvas.Left="87" Canvas.Top="254">
mytext2
</TextBlock>
</StackPanel>
所以如果我尝试使用网格,画布坐标会被忽略,我的文本块会出现在画布的顶部。
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Canvas Width="500" Height="500">
<Grid>
<Grid.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Red"></Setter>
</Style>
</Grid.Resources>
<TextBlock Text="MyTextBlock1" Canvas.Left="300" Canvas.Top="300">
</TextBlock>
</Grid>
</Canvas>
【问题讨论】:
-
你的意思是不只是使用网格?
-
目前还不清楚为什么你不能只做你在第一个例子中所做的事情。至于使用
Grid的问题,您需要将Canvas附加属性移动到Grid而不是TextBlock,因为Canvas只会在其中查找这些属性直系子女。 -
你能提供更多关于你想要达到的目标的信息吗?通常我会使用
StyleSelector来实现这一点,但目前无法在不设置附加属性的情况下告诉哪些 TextBlocks 也应用样式(因此您也可以直接应用样式 E.G. Style={StaticResource myStyle}) .我觉得ItemsControl在这里很有用,但需要了解更多关于您的要求。你需要的布局图也很好。 -
就像我说的,画布有一个复杂的布局,其中放置了许多项目。然后在画布的某些区域内,我希望全局(呵呵)应用样式,这样我就可以避免在每个 TextBlock 上都有一个 Style={StaticResource myStyle}。
-
“一个复杂的布局,其中放置了许多项目”并没有给我更多信息。我的理解是,您所追求的行为与使用
ItemsControl和DataTemplates可实现的行为相同。
标签: wpf