我将 aLabel
与ScrollViewer
属性一起使用:
<Label ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto">
Here is many many many text.
</Label>
但是没有出现滚动条。即使使用Visible
而不是Auto
.
这里有什么问题?
现在我想知道,为什么 Label 在完全不影响标签的情况下可以具有 ScrollViewer 属性?
ScrollViewer 属性是附加属性。附加属性通常具有独立于它们所应用的元素的默认行为(例如,ToolTipService
属性由服务处理,元素本身不需要知道任何有关它的信息),因此它们总是可以在任何地方设置。
它类似于BorderBrush
每个控件上的属性。控件通常将此值传递给Border
其模板中的元素。大多数控件模板包含一个边框,但许多不包含一个 ScrollViewer。但是,您可以编写一个包含一个标签模板:
<Window.Resources>
<Style TargetType="Label">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True" />
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Label ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
Content="text" />
请注意,即使我没有将TemplateBinding
s 添加到ScrollViewer
. 这是因为ScrollViewer
知道它自己的附加属性,并且如果它在模板内,则默认添加绑定。
从模板中可以看出,标签实际上只不过是设置了RecognizesAccessKey的内容呈现器。这样用户就可以Alt根据其文本使用键盘快捷键。Label
还定义了一个Target
属性来定义按下键盘快捷键时应该选择哪个元素。标签是输入元素旁边的简短描述性文本。在您的情况下(显示需要滚动的长文本),这可能是不必要的。实际上,您可以直接将文本内容放在 ScrollViewer 中:
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
Here is many many many text.
</ScrollViewer>
您需要将 ScrollViewer 放在标签周围,它是一个单独的控件:
<ScrollViewer Width="50" Height="30" HorizontalScrollBarVisibility="Visible">
<Label>
Here is many many many text.
</Label>
</ScrollViewer>
ScrollViewer
附加属性用于控制在控件ScrollViewer
中定义的控件Template
(想到的此类控件的第一个示例是ListView
)。没有ScrollViewer
inLabel
的模板,因此在 label 上设置此属性无效。
相反,您应该简单地将您的Label
with包装起来ScrollViewer
,如 JMK 所示。
您需要在 ScrollViewer 中添加标签并提供一些高度和宽度
<ScrollViewer HorizontalScrollBarVisibility="Visible" Height="40" Width="40" >
<Label>
Content
</Label>
</ScrollViewer>
您必须将 ScrollViewer 放在标签周围。喜欢 -
<ScrollViewer HorizontalScrollBarVisibility="Visible">
<Label/>
</ScrollViewer>