3

我将 aLabelScrollViewer属性一起使用:

<Label ScrollViewer.HorizontalScrollBarVisibility="Auto"
       ScrollViewer.VerticalScrollBarVisibility="Auto">
    Here is many many many text.
</Label>

但是没有出现滚动条。即使使用Visible而不是Auto.

这里有什么问题?

4

5 回答 5

5

现在我想知道,为什么 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" />

请注意,即使我没有将TemplateBindings 添加到ScrollViewer. 这是因为ScrollViewer知道它自己的附加属性,并且如果它在模板内,则默认添加绑定。

从模板中可以看出,标签实际上只不过是设置了RecognizesAccessKey的内容呈现器。这样用户就可以Alt根据其文本使用键盘快捷键。Label还定义了一个Target属性来定义按下键盘快捷键时应该选择哪个元素。标签是输入元素旁边的简短描述性文本。在您的情况下(显示需要滚动的长文本),这可能是不必要的。实际上,您可以直接将文本内容放在 ScrollViewer 中:

<ScrollViewer HorizontalScrollBarVisibility="Auto"
              VerticalScrollBarVisibility="Auto">
    Here is many many many text.
</ScrollViewer>
于 2013-10-31T13:18:28.383 回答
5

您需要将 ScrollViewer 放在标签周围,它是一个单独的控件:

<ScrollViewer Width="50" Height="30" HorizontalScrollBarVisibility="Visible">
    <Label>
        Here is many many many text.
    </Label>
</ScrollViewer>
于 2013-10-31T12:11:01.223 回答
4

ScrollViewer附加属性用于控制在控件ScrollViewer中定义的控件Template(想到的此类控件的第一个示例是ListView)。没有ScrollViewerinLabel的模板,因此在 label 上设置此属性无效。

相反,您应该简单地将您的Labelwith包装起来ScrollViewer,如 JMK 所示。

于 2013-10-31T12:20:57.380 回答
1

您需要在 ScrollViewer 中添加标签并提供一些高度和宽度

<ScrollViewer HorizontalScrollBarVisibility="Visible" Height="40" Width="40" >

   <Label>
      Content
   </Label>

</ScrollViewer>
于 2013-10-31T12:22:56.557 回答
0

您必须将 ScrollViewer 放在标签周围。喜欢 -

<ScrollViewer HorizontalScrollBarVisibility="Visible">

   <Label/>

</ScrollViewer>
于 2013-10-31T12:18:58.000 回答