'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
对象,只需像这样设置 Label
的 Content
属性:
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,因为它通常需要手动修改边距值随着其他元素特性的变化(例如字体大小、文本中的字符数等)。
同样,您应该谨慎使用 Width
和 Height
。他们有类似的问题。
换句话说,如果您将上述建议应用到您的 XAML 但它似乎不起作用,那是因为 Label
当前的布局方式使得无法看到额外的 "speed value" 文本。
我制作了一个允许我控制 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
对象,只需像这样设置 Label
的 Content
属性:
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,因为它通常需要手动修改边距值随着其他元素特性的变化(例如字体大小、文本中的字符数等)。
同样,您应该谨慎使用 Width
和 Height
。他们有类似的问题。
换句话说,如果您将上述建议应用到您的 XAML 但它似乎不起作用,那是因为 Label
当前的布局方式使得无法看到额外的 "speed value" 文本。