【问题标题】:'Live' Slider value into label“实时”滑块值到标签中
【发布时间】:2015-01-16 11:44:15
【问题描述】:

我制作了一个应用程序,让我可以控制 Microsoft NXT 2.0 Mindstorms 机器人,我最近添加了一个滑块,我想用它来设置当前引擎速度而不是固定值,所以我需要帮助.

这里有我想要使用的标签和滑块的 XAML:

<Slider x:Name="Speed" HorizontalAlignment="Left" Margin="40,58,0,0" VerticalAlignment="Top" Width="30" Orientation="Vertical" Height="187" Maximum="90" Minimum="-90" SmallChange="1" LargeChange="10" IsSnapToTickEnabled="True" TickFrequency="5" TickPlacement="BottomRight" AutoToolTipPlacement="BottomRight" MouseUp="Speed_MouseUp" BorderBrush="#00000000" Background="#00000000" Foreground="#FF858585">
<Label x:Name="Current_Speed" Content="Currently: " HorizontalAlignment="Right" Margin="0,0,478,257" Width="60" Height="29" VerticalAlignment="Bottom" Foreground="Black" />

我希望Current_Speed 写入Currently: {SliderValue} 我希望它在我上下移动滑块时立即写入滑块的当前值,就像使用工具提示选项一样。

有什么想法吗?

(请记住,我不是很熟练,因此非常感谢详细的解决方案)

提前谢谢你:)

【问题讨论】:

    标签: c# slider windows-applications


    【解决方案1】:

    这相对容易。 “诀窍”是您需要使用两个不同的 Label 对象,您可以使用 StackPanel 容器将它们聚合在一起。

    对于第二个Label 对象,只需像这样设置LabelContent 属性:

    Content="{Binding ElementName=Speed, Path=Value}"
    

    整个事情看起来像这样:

    <Slider x:Name="Speed"
            HorizontalAlignment="Left" VerticalAlignment="Top"
            Margin="40,58,0,0"
            Width="30" Height="187"
            Orientation="Vertical"
            Maximum="90" Minimum="-90"
            SmallChange="1" LargeChange="10"
            IsSnapToTickEnabled="True" TickFrequency="5" TickPlacement="BottomRight"
            AutoToolTipPlacement="BottomRight"
            MouseUp="Speed_MouseUp"
            BorderBrush="#00000000" Background="#00000000" Foreground="#FF858585" />
    <StackPanel Orientation="Horizontal" Margin="0,0,0,257" Height="29">
      <Label x:Name="Current_Speed_Text"
           Content="Currently: "
           HorizontalAlignment="Right" VerticalAlignment="Bottom"
           Foreground="Black" />
      <Label x:Name="Current_Speed"
           Content="{Binding ElementName=Speed, Path=Value}"
           HorizontalAlignment="Right" VerticalAlignment="Bottom"
           Foreground="Black" />
    </StackPanel>
    

    注意:我重新安排了布局以确保 UI 元素正确可见,并重新格式化了 XAML 本身以提高可读性。

    我还建议您使用其他机制来控制布局,而不是设置 Margin 值。 Margin 属性非常适合确保元素之间有足够的空间,但它在适应灵活的元素布局方面不是很好,因为它通常需要随着其他元素特性的变化而手动修改边距值(例如字体大小、文本中的字符数等)。

    同样,您应该谨慎使用WidthHeight。他们也有类似的问题。

    换句话说,如果您将上述建议应用于您的 XAML 并且它似乎不起作用,那是因为 Label 当前的布局方式使得额外的“速度值”文本可以'看不见。

    【讨论】:

    • 非常感谢!我目前无法尝试这一点,但从“文本”背后的逻辑来看,这对我来说似乎是有意义的(除非我想念理解)。你会在星期一收到我的消息:)谢谢
    • @DeliciousCake:请不要通过将新问题添加到现有问题中来提出新问题。发布一个全新的问题。请注意,这主要是为了的利益;更少的人会在这里看到编辑(在这一点上,可能只有我,直到有人偶然发现您的问题并寻找类似答案时),但是当您发布新问题时,它将接触到完整的名单StackOverflow 社区。​​span>
    • @DeliciousCake:上面说(上面),现在已经查看了您的编辑,我会注意到在 WPF 中处理此问题的惯用方法是让您拥有一些绑定到的“模型”对象的属性Slider.Value 属性,以便它随着滑块的变化而自动更新(反之亦然)。在非常简单的情况下,恕我直言,直接使用 Slider.Value 属性是可以接受的;即if (Speed.Value &gt; 0) ....
    • 谢谢你和我的歉意,我已经删除了编辑,现在会回答问题。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2015-08-18
    • 1970-01-01
    相关资源
    最近更新 更多