C# 如何在鼠标上方显示垂直线?
我试图在光标的X位置显示一条垂直线。我试着用一个滑动控制来做,但是我做不到。这将在用户将光标放在其上时显示 我只知道我需要修改模板。这么做有那么难吗?如果没有,你能帮我吗? 谢谢。 此参考应为您提供解决问题所需的所有信息 干杯 此参考应为您提供解决问题所需的所有信息C# 如何在鼠标上方显示垂直线?,c#,wpf,templates,xaml,slider,C#,Wpf,Templates,Xaml,Slider,我试图在光标的X位置显示一条垂直线。我试着用一个滑动控制来做,但是我做不到。这将在用户将光标放在其上时显示 我只知道我需要修改模板。这么做有那么难吗?如果没有,你能帮我吗? 谢谢。 此参考应为您提供解决问题所需的所有信息 干杯 此参考应为您提供解决问题所需的所有信息 干杯 这不容易使用模板实现,因为鼠标位置不是依赖属性,鼠标移动不是路由事件。这实际上取决于你想做什么,如果它只是显示一条垂直线,那么我同意Dany使用装饰条,因为你对滑块本身并不感兴趣。但是,如果要将拇指移动到鼠标所在的位置,我将
干杯 这不容易使用模板实现,因为鼠标位置不是依赖属性,鼠标移动不是路由事件。这实际上取决于你想做什么,如果它只是显示一条垂直线,那么我同意Dany使用装饰条,因为你对滑块本身并不感兴趣。但是,如果要将拇指移动到鼠标所在的位置,我将使用附加属性 我使用附加属性而不是将事件直接连接到控件上的原因是,它提供了更多模块化和可重用的代码库,并使XAML中的视觉效果更加明显,而不需要查看C代码 以下是我的建议
public class SliderHelperPackage
{
public static readonly DependencyProperty BindThumbToMouseProperty = DependencyProperty.RegisterAttached(
"BindThumbToMouse", typeof(bool), typeof(SliderHelperPackage), new PropertyMetadata(false, OnBindThumbToMouseChanged));
public static void SetBindThumbToMouse(UIElement element, bool value)
{
element.SetValue(BindThumbToMouseProperty, value);
}
public static bool GetBindThumbToMouse(UIElement element)
{
return (bool)element.GetValue(BindThumbToMouseProperty);
}
private static void OnBindThumbToMouseChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue.Equals(e.OldValue))
return;
var slider = d as Slider;
if (slider == null)
throw new ArgumentException(@"dependency object must be a slider", "d");
if ((bool) e.NewValue)
{
slider.MouseMove += SliderMouseMove;
}
else
{
slider.MouseMove -= SliderMouseMove;
}
}
static void SliderMouseMove(object sender, MouseEventArgs e)
{
var slider = (Slider) sender;
var position = e.GetPosition(slider);
// When the mouse moves, we update the slider's value so it's where the ticker is (we take into account margin's on the track)
slider.Value = (slider.Maximum - slider.Minimum)*Math.Max(position.X-5,0)/(slider.ActualWidth-10) + slider.Minimum;
}
}
然后可以像这样在XAML中使用它。因此,当您将其设置为true时,我们将连接到滑块上的鼠标移动事件,并更改其值,以便拇指跟随鼠标
<Slider SliderPosn:SliderHelperPackage.BindThumbToMouse="True" Margin="5" Height="25" VerticalAlignment="Top"/>
使用模板很难做到这一点,因为鼠标位置不是依赖属性,鼠标移动也不是路由事件。这实际上取决于你想做什么,如果它只是显示一条垂直线,那么我同意Dany使用装饰条,因为你对滑块本身并不感兴趣。但是,如果要将拇指移动到鼠标所在的位置,我将使用附加属性 我使用附加属性而不是将事件直接连接到控件上的原因是,它提供了更多模块化和可重用的代码库,并使XAML中的视觉效果更加明显,而不需要查看C代码 以下是我的建议
public class SliderHelperPackage
{
public static readonly DependencyProperty BindThumbToMouseProperty = DependencyProperty.RegisterAttached(
"BindThumbToMouse", typeof(bool), typeof(SliderHelperPackage), new PropertyMetadata(false, OnBindThumbToMouseChanged));
public static void SetBindThumbToMouse(UIElement element, bool value)
{
element.SetValue(BindThumbToMouseProperty, value);
}
public static bool GetBindThumbToMouse(UIElement element)
{
return (bool)element.GetValue(BindThumbToMouseProperty);
}
private static void OnBindThumbToMouseChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue.Equals(e.OldValue))
return;
var slider = d as Slider;
if (slider == null)
throw new ArgumentException(@"dependency object must be a slider", "d");
if ((bool) e.NewValue)
{
slider.MouseMove += SliderMouseMove;
}
else
{
slider.MouseMove -= SliderMouseMove;
}
}
static void SliderMouseMove(object sender, MouseEventArgs e)
{
var slider = (Slider) sender;
var position = e.GetPosition(slider);
// When the mouse moves, we update the slider's value so it's where the ticker is (we take into account margin's on the track)
slider.Value = (slider.Maximum - slider.Minimum)*Math.Max(position.X-5,0)/(slider.ActualWidth-10) + slider.Minimum;
}
}
然后可以像这样在XAML中使用它。因此,当您将其设置为true时,我们将连接到滑块上的鼠标移动事件,并更改其值,以便拇指跟随鼠标
<Slider SliderPosn:SliderHelperPackage.BindThumbToMouse="True" Margin="5" Height="25" VerticalAlignment="Top"/>
仅链接的答案不是好答案。如果链接过时了,那么答案就没用了。你能为答案添加足够的信息,以便OP可以决定该链接是否值得关注。仅链接的答案不是好答案。如果链接过时了,那么答案就没用了。你能在答案中添加足够的信息,这样OP就可以决定这个链接是否值得关注。这个人(提问者)正在做的事情的一小部分可能重复。。。这家伙(发问者)正在做的事情的一小部分可能重复。。。