'Live' 标签中的滑块值

'Live' Slider value into label

我制作了一个允许我控制 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} 我希望它在我向上或向下移动滑块时立即写入滑块的当前值,就像您可以使用 ToolTip 选项一样。

有什么想法吗?

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

提前谢谢你:)

相对容易。 "trick" 是您需要使用两个不同的 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 属性对于保证元素之间足够的 space 非常好,但它不太擅长容纳元素的灵活 layout,因为它通常需要手动修改边距值随着其他元素特性的变化(例如字体大小、文本中的字符数等)。

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

换句话说,如果您将上述建议应用到您的 XAML 但它似乎不起作用,那是因为 Label 当前的布局方式使得无法看到额外的 "speed value" 文本。