为什么ScrollViewer属性不会影响标签?

时间:2013-10-31 12:07:41

标签: c# wpf

我使用Label ScrollViewer属性:

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

但是没有滚动条出现。即使使用Visible代替Auto

这里有什么问题?

5 个答案:

答案 0 :(得分:5)

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

<ScrollViewer Width="50" Height="30" HorizontalScrollBarVisibility="Visible">
    <Label>
        Here is many many many text.
    </Label>
</ScrollViewer>

答案 1 :(得分:5)

  

现在我想知道,为什么Label可以拥有ScrollViewer属性   什么时候他们根本不影响标签?

ScrollViewer属性是附加属性。附加属性通常具有独立于它们所应用的元素的默认行为(例如,ToolTipService属性由服务处理,元素本身不需要知道任何关于它的信息),因此它们总是可以设置任何地方。

它类似于每个控件上的BorderBrush属性。控件通常将此值传递给其模板中的Border元素。大多数控件模板都包含Border,但许多控件模板不包含ScrollViewer。您可以编写包含一个的Label模板:

<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添加到ScrollViewer,这仍然有效。这是因为ScrollViewer知道它自己的附加属性,并且如果它在模板中,则默认添加绑定。

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

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

答案 2 :(得分:4)

ScrollViewer附加属性用于控制ScrollViewer,它在控件的Template中定义(这种控件的第一个例子是ListView)。 ScrollViewer的模板中没有Label,因此在标签上设置此属性无效。

相反,您应该将LabelScrollViewer一起包装,如JMK所示。

答案 3 :(得分:1)

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

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

   <Label>
      Content
   </Label>

</ScrollViewer>

答案 4 :(得分:0)

您必须将ScrollViewer放在Label周围。  像 -

<ScrollViewer HorizontalScrollBarVisibility="Visible">

   <Label/>

</ScrollViewer>