WPF C#:标签不够大

WPF C#:标签不够大,c#,wpf,animation,wpf-controls,label,C#,Wpf,Animation,Wpf Controls,Label,我将WPF用于我的C#应用程序,在这个应用程序上我有几个标签,其中的文本不适合。我想要的是让我的文本在标签内移动,这样用户就可以看到整个文本。 示例:假设我的文本长度为20个字符,而我的标签只有15个字符的空间。我想要的是,我的标签显示前15个字符(字符1-15),然后在1秒后显示相同的字符,没有第一个字符,但在末尾有另一个字符(字符2-16),然后是下一个字符(字符3-17),依此类推,直到最后15个字符(字符5-20),然后我希望它们从头开始(再次输入字符1-15) 我该怎么做?一种方法是(

我将WPF用于我的C#应用程序,在这个应用程序上我有几个标签,其中的文本不适合。我想要的是让我的文本在标签内移动,这样用户就可以看到整个文本。 示例:假设我的文本长度为20个字符,而我的标签只有15个字符的空间。我想要的是,我的标签显示前15个字符(字符1-15),然后在1秒后显示相同的字符,没有第一个字符,但在末尾有另一个字符(字符2-16),然后是下一个字符(字符3-17),依此类推,直到最后15个字符(字符5-20),然后我希望它们从头开始(再次输入字符1-15)


我该怎么做?一种方法是(显然)使用计时器,但我确信存在一个更优雅的解决方案。

我也会使用计时器来实现您描述的功能。如果您坚持在指定的时间间隔内更改标签,我认为没有太多其他解决方案。另一方面,我可能会使用工具提示,我认为这更直观。

我也会这样做为您描述的功能使用计时器。如果您坚持在指定的时间间隔内更改标签,我认为没有太多其他解决方案。另一方面,我可能会使用工具提示,我认为这更直观。

您也可以使用WPF功能。您可以创建一个自定义控件,其中包含一个文本块e、 定义控件的宽度(该宽度将小于文本块的宽度。然后定义情节提要和双动画,以按照您的需要设置动画(较慢/较快,仅向右设置动画,向右设置动画,然后向左设置动画,依此类推)


这只是一个想法。我目前很忙,但如果您需要,我可以为您提供其他代码。

您也可以使用WPF功能。您可以创建一个自定义控件,其中包含一个文本块。定义控件的宽度(这将小于文本块的宽度。然后定义故事板和双动画,以按照您的需要设置动画(较慢/较快,仅向右设置动画,向右设置动画,然后向左设置动画,依此类推)


这只是一个想法。我目前正赶时间,但如果您需要,我可以为您提供额外的代码。

下面是一个快速而肮脏的滚动控件的代码,该控件应该在用户将鼠标移到该控件上后立即执行您想要的操作

        <Canvas Name="brd" 
                ClipToBounds="True"
                Margin="10" 
                Height="20" Width="150" 
                Background="White"
                HorizontalAlignment="Left">
            <StackPanel Name="spl1" 
                        Orientation="Horizontal"
                        Canvas.Left="0">
                <TextBlock Name="tbk1"
                           Margin="10,0"
                           MinWidth="{Binding ElementName=brd,Path=ActualWidth}"
                           Text="A display of test text that is wider than the control."/>
                <TextBlock MinWidth="{Binding ElementName=brd,Path=ActualWidth}"
                           Margin="10,0"
                           Text="{Binding ElementName=tbk1,Path=Text}"/>
            </StackPanel>
            <Canvas.Triggers>
                <EventTrigger RoutedEvent="MouseEnter">
                    <BeginStoryboard Name="scroll">
                        <Storyboard RepeatBehavior="Forever">
                            <DoubleAnimation To="-200" Duration="0:0:4"  
                                             Storyboard.TargetName="spl1"
                                             Storyboard.TargetProperty="(Canvas.Left)" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger> 
                <EventTrigger RoutedEvent="MouseLeave">
                    <StopStoryboard BeginStoryboardName="scroll"/>
                </EventTrigger>
            </Canvas.Triggers>
        </Canvas>
转换器等级:

class ChangeSignConverter : IValueConverter
{
  object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    return Convert.ToDouble(value) * -1;
  }

  object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    return Convert.ToDouble(value) * -1;
  }
}

下面是一个快速而肮脏的滚动控件的代码,当用户将鼠标移到该控件上时,该控件应该可以执行您想要的操作

        <Canvas Name="brd" 
                ClipToBounds="True"
                Margin="10" 
                Height="20" Width="150" 
                Background="White"
                HorizontalAlignment="Left">
            <StackPanel Name="spl1" 
                        Orientation="Horizontal"
                        Canvas.Left="0">
                <TextBlock Name="tbk1"
                           Margin="10,0"
                           MinWidth="{Binding ElementName=brd,Path=ActualWidth}"
                           Text="A display of test text that is wider than the control."/>
                <TextBlock MinWidth="{Binding ElementName=brd,Path=ActualWidth}"
                           Margin="10,0"
                           Text="{Binding ElementName=tbk1,Path=Text}"/>
            </StackPanel>
            <Canvas.Triggers>
                <EventTrigger RoutedEvent="MouseEnter">
                    <BeginStoryboard Name="scroll">
                        <Storyboard RepeatBehavior="Forever">
                            <DoubleAnimation To="-200" Duration="0:0:4"  
                                             Storyboard.TargetName="spl1"
                                             Storyboard.TargetProperty="(Canvas.Left)" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger> 
                <EventTrigger RoutedEvent="MouseLeave">
                    <StopStoryboard BeginStoryboardName="scroll"/>
                </EventTrigger>
            </Canvas.Triggers>
        </Canvas>
转换器等级:

class ChangeSignConverter : IValueConverter
{
  object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    return Convert.ToDouble(value) * -1;
  }

  object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    return Convert.ToDouble(value) * -1;
  }
}

你考虑过使用工具提示吗?我昨天不得不这样做。我选择保留整个字符串并调整字体大小。@Shoe,工具提示不是我想要的。无论如何,谢谢。@GarryVass,我的示例可以通过更改字体大小来轻松解决,我同意,但在我的问题中,字符串可能非常长,比标签长得多。这就是我想使用此方法的原因。你考虑过使用工具提示吗?我昨天不得不这样做。我选择保留整个字符串并调整字体大小。@Shoe,工具提示不是我想要的。无论如何,谢谢。@GarryVass,我的示例可以通过更改字体大小轻松解决,我同意,但在我的问题中,字符串可以e非常长,比标签长得多。这就是我想使用此方法的原因。谢谢,工具提示不是我想要的。谢谢,工具提示不是我想要的。非常好的解决方案,工作非常好,但我没有在文本块上使用鼠标就无法使其工作。我认为我应该提供更多细节:因此我的程序读取文件和我正在谈论的标签(需要卷轴的标签)显示文件名。因为文件名可能很长,所以我想要这个“卷轴”效果。那么,我怎样才能让我的文本一直滚动,而不用鼠标?@提问者,如果你不想要求用户移动他们的鼠标,你可以设置一个不同的事件触发器,更好地满足你的要求。这就是我所要做的全部更改。非常感谢兄弟!)非常好的解决方案,效果非常好,但我没有在文本块上使用鼠标,就无法使其正常工作。在这里,我认为我应该提供更多详细信息:因此我的程序读取我正在谈论的文件和标签(需要卷轴的那一个)显示文件名。由于文件名可能很长,因此我需要此“滚动”效果。那么,我怎样才能让我的文本一直滚动,而不用鼠标?@提问者,如果你不想要求用户移动他们的鼠标,你可以设置一个不同的事件触发器,更好地满足你的要求。这就是我所要做的全部更改。非常感谢兄弟!)